浏览代码

feat: 修改Object的相关函数

addAPIToObject直接传入一个DLC_SYMBOL
SongZihuan 3 年之前
父节点
当前提交
431f8c47df
共有 3 个文件被更改,包括 13 次插入13 次删除
  1. 5 1
      include/object.h
  2. 1 4
      src/core/__object.h
  3. 7 8
      src/core/object.c

+ 5 - 1
include/object.h

@@ -1,9 +1,13 @@
 #ifndef AFUN__OBJECT_H_PUBLIC
 #ifndef AFUN__OBJECT_H_PUBLIC
 #define AFUN__OBJECT_H_PUBLIC
 #define AFUN__OBJECT_H_PUBLIC
+#include "tool.h"
 
 
 typedef struct af_Object af_Object;
 typedef struct af_Object af_Object;
 typedef struct af_Inherit af_Inherit;
 typedef struct af_Inherit af_Inherit;
 
 
+typedef void pValueAPI();
+NEW_DLC_SYMBOL(pValueAPI, pAPIFUNC);  // TODO-szh 移动到_object.h
+
 #include "env.h"
 #include "env.h"
 #include "tool.h"
 #include "tool.h"
 
 
@@ -17,6 +21,6 @@ af_Inherit *freeIherit(af_Inherit *ih);
 void freeAllIherit(af_Inherit *ih);
 void freeAllIherit(af_Inherit *ih);
 
 
 void *findObjectAPI(char *api_name, af_Object *obj);
 void *findObjectAPI(char *api_name, af_Object *obj);
-int addAPIToObject(DlcHandle *dlc, char *func_name, char *api_name,
+int addAPIToObject(DLC_SYMBOL(pAPIFUNC) func, char *api_name,
                    af_Object *obj);
                    af_Object *obj);
 #endif //AFUN__OBJECT_H_PUBLIC
 #endif //AFUN__OBJECT_H_PUBLIC

+ 1 - 4
src/core/__object.h

@@ -18,9 +18,6 @@ typedef struct af_ObjectAPI af_ObjectAPI;
 
 
 #define API_HASHTABLE_SIZE (8)
 #define API_HASHTABLE_SIZE (8)
 
 
-typedef void pValueAPI();
-NEW_DLC_SYMBOL(pValueAPI, pAPIFUNC);
-
 struct af_ObjectAPINode {
 struct af_ObjectAPINode {
     char *name;  // api名字
     char *name;  // api名字
     DLC_SYMBOL(pAPIFUNC) api;  // api函数
     DLC_SYMBOL(pAPIFUNC) api;  // api函数
@@ -61,7 +58,7 @@ struct af_Inherit {
 };
 };
 
 
 void freeObjectData(af_ObjectData *od);  // gc使用
 void freeObjectData(af_ObjectData *od);  // gc使用
-int addAPIToObjectData(DlcHandle *dlc, char *func_name, char *api_name,
+int addAPIToObjectData(DLC_SYMBOL(pAPIFUNC) func, char *api_name,
                        af_ObjectData *od);
                        af_ObjectData *od);
 af_ObjectAPINode *findObjectDataAPINode(char *api_name, af_ObjectData *od);
 af_ObjectAPINode *findObjectDataAPINode(char *api_name, af_ObjectData *od);
 
 

+ 7 - 8
src/core/object.c

@@ -5,7 +5,7 @@
 static af_ObjectData *makeObjectData_Pri(char *id, size_t data_size, bool inherit_api, bool allow_iherit);
 static af_ObjectData *makeObjectData_Pri(char *id, size_t data_size, bool inherit_api, bool allow_iherit);
 static af_Object *makeObject_Pri(char *id, size_t data_size, bool inherit_api, bool allow_iherit);
 static af_Object *makeObject_Pri(char *id, size_t data_size, bool inherit_api, bool allow_iherit);
 
 
-static af_ObjectAPINode *makeObjectAPINode(DlcHandle *dlc, char *func_name, char *api_name);
+static af_ObjectAPINode *makeObjectAPINode(DLC_SYMBOL(pAPIFUNC) func, char *api_name);
 static af_ObjectAPINode *freeObjectAPINode(af_ObjectAPINode *apin);
 static af_ObjectAPINode *freeObjectAPINode(af_ObjectAPINode *apin);
 static void freeAllObjectAPINode(af_ObjectAPINode *apin);
 static void freeAllObjectAPINode(af_ObjectAPINode *apin);
 static af_ObjectAPI *makeObjectAPI(void);
 static af_ObjectAPI *makeObjectAPI(void);
@@ -123,13 +123,12 @@ void freeAllIherit(af_Inherit *ih) {
         ih = freeIherit(ih);
         ih = freeIherit(ih);
 }
 }
 
 
-static af_ObjectAPINode *makeObjectAPINode(DlcHandle *dlc, char *func_name, char *api_name) {
-    DLC_SYMBOL(pAPIFUNC) func = READ_SYMBOL(dlc, func_name, pAPIFUNC);
+static af_ObjectAPINode *makeObjectAPINode(DLC_SYMBOL(pAPIFUNC) func, char *api_name) {
     if (func == NULL)
     if (func == NULL)
         return NULL;
         return NULL;
 
 
     af_ObjectAPINode *apin = calloc(sizeof(af_ObjectAPINode), 1);
     af_ObjectAPINode *apin = calloc(sizeof(af_ObjectAPINode), 1);
-    apin->api = func;
+    apin->api = COPY_SYMBOL(func, pAPIFUNC);
     apin->name = strCopy(api_name);
     apin->name = strCopy(api_name);
     return apin;
     return apin;
 }
 }
@@ -165,7 +164,7 @@ static void freeObjectAPI(af_ObjectAPI *api) {
  * 若dlc中不存在指定函数则返回-1且不作修改
  * 若dlc中不存在指定函数则返回-1且不作修改
  * 操作成功返回1
  * 操作成功返回1
  */
  */
-int addAPIToObjectData(DlcHandle *dlc, char *func_name, char *api_name,
+int addAPIToObjectData(DLC_SYMBOL(pAPIFUNC) func, char *api_name,
                         af_ObjectData *od) {
                         af_ObjectData *od) {
     time33_t index = time33(api_name) % API_HASHTABLE_SIZE;
     time33_t index = time33(api_name) % API_HASHTABLE_SIZE;
     af_ObjectAPINode **pNode = &od->api->node[index];
     af_ObjectAPINode **pNode = &od->api->node[index];
@@ -175,7 +174,7 @@ int addAPIToObjectData(DlcHandle *dlc, char *func_name, char *api_name,
             return 0;
             return 0;
     }
     }
 
 
-    *pNode = makeObjectAPINode(dlc, func_name, api_name);
+    *pNode = makeObjectAPINode(func, api_name);
     return *pNode == NULL ? -1 : 1;
     return *pNode == NULL ? -1 : 1;
 }
 }
 
 
@@ -192,9 +191,9 @@ af_ObjectAPINode *findObjectDataAPINode(char *api_name, af_ObjectData *od) {
  * 函数名: findObjectDataAPINode
  * 函数名: findObjectDataAPINode
  * 目标: 从DLC中获取函数并写入Object的API
  * 目标: 从DLC中获取函数并写入Object的API
  */
  */
-int addAPIToObject(DlcHandle *dlc, char *func_name, char *api_name,
+int addAPIToObject(DLC_SYMBOL(pAPIFUNC) func, char *api_name,
                    af_Object *obj) {
                    af_Object *obj) {
-    return addAPIToObjectData(dlc, func_name, api_name, obj->data);
+    return addAPIToObjectData(func, api_name, obj->data);
 }
 }
 
 
 /*
 /*