*/}}
Procházet zdrojové kódy

Implement laGetInstanceViaNUID

YimingWu před 18 hodinami
rodič
revize
816c840017
2 změnil soubory, kde provedl 13 přidání a 2 odebrání
  1. 11 1
      la_data.c
  2. 2 1
      la_data.h

+ 11 - 1
la_data.c

@@ -3053,6 +3053,12 @@ void la_AddDataInst(void *ReadInstance, char *ReadNUID, void *ActualInstance){
     lstPushItem(l, head); //always push so we get the latest during ptr sync.
 }
 
+void* laGetInstanceViaNUID(char *NUID, int LoadFileIfFound){
+    void* inst=la_GetReadDBInstNUID(NUID); if(inst) return inst; if(!LoadFileIfFound) return 0;
+    laLoadHyperResources(NUID);
+    return la_GetReadDBInstNUID(NUID);
+}
+
 laPtrSync *la_AddPtrSyncDirect(void *Refer, void *Parent, laProp *Sub){
     laPtrSync *ps = memAcquireSimple(sizeof(laPtrSync));
     ps->RefDB = Refer;
@@ -3243,7 +3249,9 @@ int la_ExtractProp(laUDF *udf, laManagedUDF* mUDF, laPropPack *pp, void *ParentI
             Instance = la_ReadPointer(udf);
             if (Instance && p->Offset>=0){
                 if (p->OffsetIsPointer) la_AddPtrSyncCommand(Instance, ParentInst, 0, p);
-                else la_AddDataInst(Instance, 0, ((BYTE *)pp->LastPs->UseInstance + p->Offset));
+                else{ la_AddDataInst(Instance, 0, ((BYTE *)pp->LastPs->UseInstance + p->Offset));
+                    printf("Hey problem!\n");
+                }//<-- looks like this could be problem, data inst can only be memAcquired, so it will always be a pointer.
             }
         }elif (SubMode == (short)(LA_UDF_REFER | LA_UDF_HYPER_ITEM)){
             char NUID[32]={0};
@@ -3445,6 +3453,7 @@ void la_RematchPointers(int Mode){
     while(inst=lstPopPointer(&MAIN.RenewHyper2s)){ laMemNodeHyper* h=memGetHead(inst,0);memMakeHyperData(h);memAssignRef(h,&h->FromFile,0);  }
 }
 
+void la_ClearDBInst1(){ memset(&MAIN.DBInst1,0,sizeof(laHash65536)); }
 
 int la_WriteHyperRecords(laUDF *udf){
     int i = 0;
@@ -3628,6 +3637,7 @@ int laExtractUDF(laUDF *udf, laManagedUDF* mUDF, int Mode){
     }
 
     la_RematchPointers(Mode);
+    la_ClearDBInst1();
     
     laHideProgress();
     

+ 2 - 1
la_data.h

@@ -993,6 +993,8 @@ void laClearSaveProp();
 
 int laRegisterModifications(int ReturnIfAnyMod, int ReturnIfAnyEmpty, int* rempty, int RegisterToUDF);
 
+void* laGetInstanceViaNUID(char *NUID, int LoadFileIfFound);
+
 laUDF *laOpenUDF(char *FileName, int ReadToMemory, laUDFRegistry* ReadRegistryRef, laManagedUDF** UseManaged);
 void laCloseUDF(laUDF *udf);
 void laExtractProp(laUDF *udf, char* Path);
@@ -1002,7 +1004,6 @@ int laExtractQuickRaw(FILE* fp, char* path, uint8_t** buf, size_t* size);
 
 int laLoadHyperResources(char* uid_search);
 
-laUDFOwnHyperItem* laFindHyperItem(laPropContainer* pc, char* uid);
 laUDFRegistry* laFindUDFRegistry(char* Path);
 laUDFRegistry* laCreateUDFRegistry(char* Path);
 void laClearUDFRegistries();