Kaynağa Gözat

ncd: NCDVal: optimize copying of ID-strings

ambrop7 13 yıl önce
ebeveyn
işleme
5ded855dc3
1 değiştirilmiş dosya ile 11 ekleme ve 2 silme
  1. 11 2
      ncd/NCDVal.c

+ 11 - 2
ncd/NCDVal.c

@@ -487,9 +487,18 @@ NCDValRef NCDVal_NewCopy (NCDValMem *mem, NCDValRef val)
         } break;
         } break;
         
         
         case IDSTRING_TYPE: {
         case IDSTRING_TYPE: {
-            struct NCDVal__idstring *ids_e = ptr;
+            NCDVal__idx size = sizeof(struct NCDVal__idstring);
+            NCDVal__idx idx = NCDValMem__Alloc(mem, size, __alignof(struct NCDVal__idstring));
+            if (idx < 0) {
+                goto fail;
+            }
             
             
-            return NCDVal_NewIdString(mem, ids_e->string_id, ids_e->string_index);
+            struct NCDVal__idstring *ids_e = NCDValMem__BufAt(val.mem, val.idx);
+            struct NCDVal__idstring *new_ids_e = NCDValMem__BufAt(mem, idx);
+            
+            *new_ids_e = *ids_e;
+            
+            return NCDVal__Ref(mem, idx);
         } break;
         } break;
         
         
         case EXTERNALSTRING_TYPE: {
         case EXTERNALSTRING_TYPE: {