Bladeren bron

ncd: NCDStringIndex: Refactor using MemRef.

Ambroz Bizjak 11 jaren geleden
bovenliggende
commit
5f79b8f2d2
7 gewijzigde bestanden met toevoegingen van 20 en 35 verwijderingen
  1. 2 2
      ncd/NCDInterpProcess.c
  2. 7 7
      ncd/NCDInterpreter.c
  3. 1 1
      ncd/NCDModule.c
  4. 2 12
      ncd/NCDStringIndex.c
  5. 1 2
      ncd/NCDStringIndex.h
  6. 6 10
      ncd/NCDVal.c
  7. 1 1
      ncd/modules/value.c

+ 2 - 2
ncd/NCDInterpProcess.c

@@ -247,7 +247,7 @@ const char * NCDInterpProcess_StatementCmdName (NCDInterpProcess *o, int i, NCDS
     ASSERT(i < o->num_stmts)
     ASSERT(string_index)
     
-    return NCDStringIndex_Value(string_index, o->stmts[i].cmdname);
+    return NCDStringIndex_Value(string_index, o->stmts[i].cmdname).ptr;
 }
 
 void NCDInterpProcess_StatementObjNames (NCDInterpProcess *o, int i, const NCD_string_id_t **out_objnames, size_t *out_num_objnames)
@@ -272,7 +272,7 @@ const struct NCDInterpModule * NCDInterpProcess_StatementGetSimpleModule (NCDInt
     struct NCDInterpProcess__stmt *e = &o->stmts[i];
     
     if (!e->binding.simple_module) {
-        const char *cmdname = NCDStringIndex_Value(string_index, e->cmdname);
+        const char *cmdname = NCDStringIndex_Value(string_index, e->cmdname).ptr;
         e->binding.simple_module = NCDModuleIndex_FindModule(module_index, cmdname);
     }
     

+ 7 - 7
ncd/NCDInterpreter.c

@@ -366,7 +366,7 @@ char * implode_id_strings (NCDInterpreter *interp, const NCD_string_id_t *names,
         if (!is_first && !ExpString_AppendChar(&str, del)) {
             goto fail1;
         }
-        const char *name_str = NCDStringIndex_Value(&interp->string_index, *names);
+        const char *name_str = NCDStringIndex_Value(&interp->string_index, *names).ptr;
         if (!ExpString_Append(&str, name_str)) {
             goto fail1;
         }
@@ -841,7 +841,7 @@ static int eval_func_eval_call (void *user, NCD_string_id_t func_name_id, NCDEva
     
     struct NCDInterpFunction const *ifunc = NCDModuleIndex_FindFunction(&p->interp->mindex, func_name_id);
     if (!ifunc) {
-        STATEMENT_LOG(ps, BLOG_ERROR, "unknown function: %s", NCDStringIndex_Value(&p->interp->string_index, func_name_id));
+        STATEMENT_LOG(ps, BLOG_ERROR, "unknown function: %s", NCDStringIndex_Value(&p->interp->string_index, func_name_id).ptr);
         return 0;
     }
     
@@ -907,7 +907,7 @@ void process_advance (struct process *p)
         module = NCDInterpProcess_StatementGetMethodModule(p->iprocess, p->ap, object_type, &p->interp->mindex);
         
         if (!module) {
-            const char *type_str = NCDStringIndex_Value(&p->interp->string_index, object_type);
+            const char *type_str = NCDStringIndex_Value(&p->interp->string_index, object_type).ptr;
             const char *cmdname_str = NCDInterpProcess_StatementCmdName(p->iprocess, p->ap, &p->interp->string_index);
             STATEMENT_LOG(ps, BLOG_ERROR, "unknown method statement: %s::%s", type_str, cmdname_str);
             goto fail0;
@@ -1242,27 +1242,27 @@ int statement_instance_func_initprocess (void *vinterp, NCDModuleProcess* mp, NC
     // find process
     NCDInterpProcess *iprocess = NCDInterpProg_FindProcess(&interp->iprogram, template_name);
     if (!iprocess) {
-        const char *str = NCDStringIndex_Value(&interp->string_index, template_name);
+        const char *str = NCDStringIndex_Value(&interp->string_index, template_name).ptr;
         BLog(BLOG_ERROR, "no template named %s", str);
         return 0;
     }
     
     // make sure it's a template
     if (!NCDInterpProcess_IsTemplate(iprocess)) {
-        const char *str = NCDStringIndex_Value(&interp->string_index, template_name);
+        const char *str = NCDStringIndex_Value(&interp->string_index, template_name).ptr;
         BLog(BLOG_ERROR, "need template to create a process, but %s is a process", str);
         return 0;
     }
     
     // create process
     if (!process_new(interp, iprocess, mp)) {
-        const char *str = NCDStringIndex_Value(&interp->string_index, template_name);
+        const char *str = NCDStringIndex_Value(&interp->string_index, template_name).ptr;
         BLog(BLOG_ERROR, "failed to create process from template %s", str);
         return 0;
     }
     
     if (BLog_WouldLog(BLOG_INFO, BLOG_CURRENT_CHANNEL)) {
-        const char *str = NCDStringIndex_Value(&interp->string_index, template_name);
+        const char *str = NCDStringIndex_Value(&interp->string_index, template_name).ptr;
         BLog(BLOG_INFO, "created process from template %s", str);
     }
     

+ 1 - 1
ncd/NCDModule.c

@@ -228,7 +228,7 @@ static int object_func_getvar (const NCDObject *obj, NCD_string_id_t name, NCDVa
         if (NCDStringIndex_HasNulls(n->params->iparams->string_index, name)) {
             return 0;
         }
-        const char *name_str = NCDStringIndex_Value(n->params->iparams->string_index, name);
+        const char *name_str = NCDStringIndex_Value(n->params->iparams->string_index, name).ptr;
         res = n->m->module.func_getvar(n->mem, name_str, mem, out_value);
     }
     ASSERT(res == 0 || res == 1)

+ 2 - 12
ncd/NCDStringIndex.c

@@ -221,24 +221,14 @@ NCD_string_id_t NCDStringIndex_GetBinMr (NCDStringIndex *o, MemRef str)
     return NCDStringIndex_GetBin(o, str.ptr, str.len);
 }
 
-const char * NCDStringIndex_Value (NCDStringIndex *o, NCD_string_id_t id)
+MemRef NCDStringIndex_Value (NCDStringIndex *o, NCD_string_id_t id)
 {
     DebugObject_Access(&o->d_obj);
     ASSERT(id >= 0)
     ASSERT(id < o->entries_size)
     ASSERT(o->entries[id].str)
     
-    return o->entries[id].str;
-}
-
-size_t NCDStringIndex_Length (NCDStringIndex *o, NCD_string_id_t id)
-{
-    DebugObject_Access(&o->d_obj);
-    ASSERT(id >= 0)
-    ASSERT(id < o->entries_size)
-    ASSERT(o->entries[id].str)
-    
-    return o->entries[id].str_len;
+    return MemRef_Make(o->entries[id].str, o->entries[id].str_len);
 }
 
 int NCDStringIndex_HasNulls (NCDStringIndex *o, NCD_string_id_t id)

+ 1 - 2
ncd/NCDStringIndex.h

@@ -77,8 +77,7 @@ NCD_string_id_t NCDStringIndex_LookupBin (NCDStringIndex *o, const char *str, si
 NCD_string_id_t NCDStringIndex_Get (NCDStringIndex *o, const char *str);
 NCD_string_id_t NCDStringIndex_GetBin (NCDStringIndex *o, const char *str, size_t str_len);
 NCD_string_id_t NCDStringIndex_GetBinMr (NCDStringIndex *o, MemRef str);
-const char * NCDStringIndex_Value (NCDStringIndex *o, NCD_string_id_t id);
-size_t NCDStringIndex_Length (NCDStringIndex *o, NCD_string_id_t id);
+MemRef NCDStringIndex_Value (NCDStringIndex *o, NCD_string_id_t id);
 int NCDStringIndex_HasNulls (NCDStringIndex *o, NCD_string_id_t id);
 int NCDStringIndex_GetRequests (NCDStringIndex *o, struct NCD_string_request *requests) WARN_UNUSED;
 

+ 6 - 10
ncd/NCDVal.c

@@ -915,7 +915,7 @@ const char * NCDVal_StringData (NCDValRef string)
         
         case IDSTRING_TYPE: {
             struct NCDVal__idstring *ids_e = ptr;
-            const char *value = NCDStringIndex_Value(ids_e->string_index, ids_e->string_id);
+            const char *value = NCDStringIndex_Value(ids_e->string_index, ids_e->string_id).ptr;
             return value;
         } break;
         
@@ -944,7 +944,7 @@ size_t NCDVal_StringLength (NCDValRef string)
         
         case IDSTRING_TYPE: {
             struct NCDVal__idstring *ids_e = ptr;
-            return NCDStringIndex_Length(ids_e->string_index, ids_e->string_id);
+            return NCDStringIndex_Value(ids_e->string_index, ids_e->string_id).len;
         } break;
         
         case EXTERNALSTRING_TYPE: {
@@ -972,7 +972,7 @@ MemRef NCDVal_StringMemRef (NCDValRef string)
         
         case IDSTRING_TYPE: {
             struct NCDVal__idstring *ids_e = ptr;
-            return MemRef_Make(NCDStringIndex_Value(ids_e->string_index, ids_e->string_id), NCDStringIndex_Length(ids_e->string_index, ids_e->string_id));
+            return NCDStringIndex_Value(ids_e->string_index, ids_e->string_id);
         } break;
         
         case EXTERNALSTRING_TYPE: {
@@ -1004,7 +1004,7 @@ int NCDVal_StringNullTerminate (NCDValRef string, NCDValNullTermString *out)
         
         case IDSTRING_TYPE: {
             struct NCDVal__idstring *ids_e = ptr;
-            out->data = (char *)NCDStringIndex_Value(ids_e->string_index, ids_e->string_id);
+            out->data = (char *)NCDStringIndex_Value(ids_e->string_index, ids_e->string_id).ptr;
             out->is_allocated = 0;
             return 1;
         } break;
@@ -1124,9 +1124,7 @@ int NCDVal_StringEqualsId (NCDValRef string, NCD_string_id_t string_id,
     switch (get_internal_type(*(int *)ptr)) {
         case STOREDSTRING_TYPE: {
             struct NCDVal__string *str_e = ptr;
-            const char *string_data = NCDStringIndex_Value(string_index, string_id);
-            size_t string_length = NCDStringIndex_Length(string_index, string_id);
-            return (string_length == str_e->length) && !memcmp(string_data, str_e->data, string_length);
+            return MemRef_Equal(NCDStringIndex_Value(string_index, string_id), MemRef_Make(str_e->data, str_e->length));
         } break;
         
         case IDSTRING_TYPE: {
@@ -1137,9 +1135,7 @@ int NCDVal_StringEqualsId (NCDValRef string, NCD_string_id_t string_id,
         
         case EXTERNALSTRING_TYPE: {
             struct NCDVal__externalstring *exs_e = ptr;
-            const char *string_data = NCDStringIndex_Value(string_index, string_id);
-            size_t string_length = NCDStringIndex_Length(string_index, string_id);
-            return (string_length == exs_e->length) && !memcmp(string_data, exs_e->data, string_length);
+            return MemRef_Equal(NCDStringIndex_Value(string_index, string_id), MemRef_Make(exs_e->data, exs_e->length));
         } break;
         
         default:

+ 1 - 1
ncd/modules/value.c

@@ -492,7 +492,7 @@ static MemRef value_string_memref (struct value *v)
         case STOREDSTRING_TYPE:
             return MemRef_Make(NCDRefString_GetBuf(v->storedstring.rstr), v->storedstring.length);
         case IDSTRING_TYPE:
-            return MemRef_Make(NCDStringIndex_Value(v->idstring.string_index, v->idstring.id), NCDStringIndex_Length(v->idstring.string_index, v->idstring.id));
+            return NCDStringIndex_Value(v->idstring.string_index, v->idstring.id);
             break;
         case EXTERNALSTRING_TYPE:
             return MemRef_Make(v->externalstring.data, v->externalstring.length);