Przeglądaj źródła

refactor: 优化函数命名

RyanCW 2 miesięcy temu
rodzic
commit
aa5fb751af

+ 28 - 21
RyanJson/RyanJson.c

@@ -89,6 +89,7 @@ typedef struct
 } RyanJsonNodeInfo_t;
 
 #define RyanJsonFlagSize               sizeof(uint8_t)
+#define RyanJsonKeyFeidLenMaxSize      sizeof(uint32_t)
 #define RyanJsonAlign(size, align)     (((size) + (align) - 1) & ~((align) - 1))
 #define RyanJsonAlignDown(size, align) ((size) & ~((align) - 1))
 #define _checkType(info, type)         ((info) == (type))
@@ -204,7 +205,7 @@ static uint8_t *RyanJsonGetHiddePrt(RyanJson_t pJson)
 
 	// 用memcpy规避非对其警告
 	void *tmpPtr = NULL;
-	RyanJsonMemcpy((void *)&tmpPtr, (RyanJsonGetPayloadPtr(pJson) + RyanJsonFlagSize + sizeof(uint32_t)), sizeof(void *));
+	RyanJsonMemcpy((void *)&tmpPtr, (RyanJsonGetPayloadPtr(pJson) + RyanJsonFlagSize + RyanJsonKeyFeidLenMaxSize), sizeof(void *));
 	return (uint8_t *)tmpPtr;
 }
 static void RyanJsonSetHiddePrt(RyanJson_t pJson, uint8_t *hiddePrt)
@@ -215,7 +216,8 @@ static void RyanJsonSetHiddePrt(RyanJson_t pJson, uint8_t *hiddePrt)
 	// 用memcpy规避非对其警告
 	void *tmpPtr = hiddePrt;
 	// uint8_t是flag,uint32_t是记录key的长度空间
-	RyanJsonMemcpy((RyanJsonGetPayloadPtr(pJson) + RyanJsonFlagSize + sizeof(uint32_t)), (const void *)&tmpPtr, sizeof(void *));
+	RyanJsonMemcpy((RyanJsonGetPayloadPtr(pJson) + RyanJsonFlagSize + RyanJsonKeyFeidLenMaxSize), (const void *)&tmpPtr,
+		       sizeof(void *));
 }
 
 /**
@@ -231,25 +233,25 @@ static uint8_t *RyanJsonGetHiddenPtrAt(RyanJson_t pJson, uint32_t index)
 	return (uint8_t *)(RyanJsonGetHiddePrt(pJson) + (index));
 }
 
-static void RyanJsonSetLenKey(RyanJson_t pJson, uint32_t value)
+static void RyanJsonSetKeyLen(RyanJson_t pJson, uint32_t value)
 {
 	RyanJsonCheckAssert(NULL != pJson);
 	uint8_t *buf = RyanJsonGetPayloadPtr(pJson) + RyanJsonFlagSize;
-	uint8_t len = RyanJsonGetPayloadEncodeKeyLenByFlag(pJson);
-	RyanJsonCheckAssert(len <= 4);
+	uint8_t keyFieldLen = RyanJsonGetPayloadEncodeKeyLenByFlag(pJson);
+	RyanJsonCheckAssert(keyFieldLen <= RyanJsonKeyFeidLenMaxSize);
 
-	RyanJsonMemcpy(buf, &value, len);
+	RyanJsonMemcpy(buf, &value, keyFieldLen);
 }
 
-static uint32_t RyanJsonGetLenKey(RyanJson_t pJson)
+static uint32_t RyanJsonGetKeyLen(RyanJson_t pJson)
 {
 	RyanJsonCheckAssert(NULL != pJson);
 	uint8_t *buf = RyanJsonGetPayloadPtr(pJson) + RyanJsonFlagSize;
-	uint8_t len = RyanJsonGetPayloadEncodeKeyLenByFlag(pJson);
-	RyanJsonCheckAssert(len <= 4);
+	uint8_t keyFieldLen = RyanJsonGetPayloadEncodeKeyLenByFlag(pJson);
+	RyanJsonCheckAssert(keyFieldLen <= RyanJsonKeyFeidLenMaxSize);
 
 	uint32_t value = 0;
-	RyanJsonMemcpy(&value, buf, len);
+	RyanJsonMemcpy(&value, buf, keyFieldLen);
 	return value;
 }
 
@@ -261,7 +263,8 @@ static void *RyanJsonGetValue(RyanJson_t pJson)
 	if (RyanJsonIsKey(pJson) || RyanJsonIsString(pJson))
 	{
 		len += RyanJsonGetInlineStringSize();
-		// jsonLog(" keyLen: %d, keyLenField: %d, \r\n", RyanJsonGetLenKey(pJson), RyanJsonGetPayloadEncodeKeyLenByFlag(pJson));
+		// jsonLog(" keyLen: %d, keyLenField: %d, \r\n", RyanJsonGetKeyLen(pJson),
+		// RyanJsonGetPayloadEncodeKeyLenByFlag(pJson));
 	}
 
 	return RyanJsonGetPayloadPtr(pJson) + len;
@@ -427,6 +430,7 @@ static RyanJsonBool_e RyanJsonChangeString(RyanJson_t pJson, RyanJsonBool_e isNe
 		}
 	}
 
+	// keyLenField(0-3) + 1 为key的长度
 	if ((mallocSize + keyLenField + 1) <= RyanJsonGetInlineStringSize()) { RyanJsonSetPayloadStrIsPtrByFlag(pJson, RyanJsonFalse); }
 	else
 	{
@@ -459,9 +463,9 @@ static RyanJsonBool_e RyanJsonChangeString(RyanJson_t pJson, RyanJsonBool_e isNe
 	{
 		RyanJsonSetPayloadWhiteKeyByFlag(pJson, RyanJsonTrue);
 		RyanJsonSetPayloadEncodeKeyLenByFlag(pJson, keyLenField);
-		RyanJsonSetLenKey(pJson, keyLen);
+		RyanJsonSetKeyLen(pJson, keyLen);
 
-		jsonLog(" keyLen: %d, keyLenField: %d, \r\n", RyanJsonGetLenKey(pJson), RyanJsonGetPayloadEncodeKeyLenByFlag(pJson));
+		jsonLog(" keyLen: %d, keyLenField: %d, \r\n", RyanJsonGetKeyLen(pJson), RyanJsonGetPayloadEncodeKeyLenByFlag(pJson));
 
 		if (RyanJsonFalse == RyanJsonGetPayloadStrIsPtrByFlag(pJson))
 		{
@@ -594,9 +598,9 @@ char *RyanJsonGetKey(RyanJson_t pJson)
 	RyanJsonCheckReturnNull(NULL != pJson);
 	if (RyanJsonFalse == RyanJsonGetPayloadStrIsPtrByFlag(pJson))
 	{
-		uint8_t len = RyanJsonGetPayloadEncodeKeyLenByFlag(pJson);
-		RyanJsonCheckAssert(len <= 4);
-		return (char *)(RyanJsonGetPayloadPtr(pJson) + RyanJsonFlagSize + len);
+		uint8_t keyFieldLen = RyanJsonGetPayloadEncodeKeyLenByFlag(pJson);
+		RyanJsonCheckAssert(keyFieldLen <= RyanJsonKeyFeidLenMaxSize);
+		return (char *)(RyanJsonGetPayloadPtr(pJson) + RyanJsonFlagSize + keyFieldLen);
 	}
 
 	return (char *)RyanJsonGetHiddenPtrAt(pJson, 0);
@@ -606,16 +610,19 @@ char *RyanJsonGetStringValue(RyanJson_t pJson)
 {
 	RyanJsonCheckReturnNull(NULL != pJson);
 
+	uint32_t len = 0;
+
 	if (RyanJsonFalse == RyanJsonGetPayloadStrIsPtrByFlag(pJson))
 	{
-		uint32_t len = RyanJsonGetPayloadEncodeKeyLenByFlag(pJson);
-		RyanJsonCheckAssert(len <= 4);
-		if (RyanJsonIsKey(pJson)) { len += RyanJsonGetLenKey(pJson) + 1U; }
+		uint8_t keyFieldLen = RyanJsonGetPayloadEncodeKeyLenByFlag(pJson);
+		RyanJsonCheckAssert(keyFieldLen <= RyanJsonKeyFeidLenMaxSize);
+
+		len += keyFieldLen;
+		if (RyanJsonIsKey(pJson)) { len += RyanJsonGetKeyLen(pJson) + 1U; }
 		return (char *)(RyanJsonGetPayloadPtr(pJson) + RyanJsonFlagSize + len);
 	}
 
-	uint32_t len = 0;
-	if (RyanJsonIsKey(pJson)) { len = RyanJsonGetLenKey(pJson) + 1U; }
+	if (RyanJsonIsKey(pJson)) { len = RyanJsonGetKeyLen(pJson) + 1U; }
 
 	return (char *)RyanJsonGetHiddenPtrAt(pJson, len);
 }

+ 1 - 3
RyanJson/RyanJson.h

@@ -70,7 +70,7 @@ struct RyanJsonNode
 	 *            11=4字节 (≤UINT32_MAX)
 	 *
 	 * - bit7   : 表示key / strValue 存储模式
-	 *            1:inline 模式, 0=ptr 模式
+	 *            0:inline 模式, 1=ptr 模式
 	 *
 	 * @brief 动态载荷存储区
      * 目的:
@@ -327,8 +327,6 @@ extern RyanJsonBool_e RyanJsonChangeIntValue(RyanJson_t pJson, int32_t number);
 extern RyanJsonBool_e RyanJsonChangeDoubleValue(RyanJson_t pJson, double number);
 #define RyanJsonChangeBoolValue(pJson, boolean) RyanJsonSetPayloadBoolValueByFlag(pJson, boolean)
 
-// #define RyanJsonChangeStringValue(pJson, strValue) {RyanJson_t* aaaasd = &pJson; RyanJsonChangeStringValue22(aaaasd, strValue);}
-
 // 这是change方法的补充,当需要修改value类型时,使用此函数
 // 请参考 changeJsonTest 示例,严格按照规则来使用
 /**

+ 2 - 3
RyanJson/RyanJsonConfig.h

@@ -19,9 +19,8 @@ extern "C" {
 #include "rtthread.h"
 #define RyanJsonMemset             rt_memset
 #define RyanJsonMemcpy             rt_memcpy
-// rtt的memmove实现比较简单
-// 也可以注释掉这个宏,交给RyanJson内部实现的memmove,RyanJson内部会尽量的使用memcpy
-// #define RyanJsonMemmove            rt_memmove
+// 平台没有memove或者memove实现性能低的,也可以注释掉这个宏,交给RyanJson内部实现的memmove,RyanJson内部会尽量的使用memcpy
+#define RyanJsonMemmove            rt_memmove
 #define RyanJsonStrlen             rt_strlen
 #define RyanJsonStrcmp             rt_strcmp
 #define RyanJsonSnprintf           rt_snprintf

+ 3 - 3
test/RyanJsonMemoryFootprintTest.c

@@ -239,12 +239,12 @@ RyanJsonBool_e RyanJsonMemoryFootprintTest(void)
 		  "\"null\"}";
 	printfJsonCompera(jsonstr);
 
-	printf("\r\n--------------------------- 小对象json 纯字符串内存占用测试 --------------------------\r\n");
+	printf("\r\n--------------------------- 压缩后的json业务对象内存占用测试 --------------------------\r\n");
 	jsonstr = "{\"0\":\"0\",\"1\":\"189774523\",\"2\":{\"7\":\"3\",\"8\":\"103\",\"9\":\"37\",\"20\":\"0\",\"26\":\"37\",\"27\":"
 		  "\"367\",\"28\":\"367\",\"s\":\"0\",\"t\":\"0\",\"a\":\"24.98\",\"2a\":\"0\",\"1p\":\"23628\"},\"3\":\"0\",\"22\":"
 		  "\"epmgrow1105\",\"23\":\"0\",\"29\":\"0\",\"i\":\"4\",\"b\":\"900\",\"c\":\"1\",\"rsrp\":\"-111\",\"rsrq\":\"-4\","
-		  "\"sinr\":\"0\",\"soc\":\"AIR780EPM\",\"j\":\"0\",\"g\":\"898604021025D0152523\",\"h\":\"866965083262839\",\"d\":\"1.3.5."
-		  "00.20260104\",\"f\":\"0\",\"k\":\"1\",\"l\":\"20000\",\"m\":\"20000\",\"u\":\"0\",\"v\":\"0\",\"e\":\"1\",\"w\":\"0."
+		  "\"sinr\":\"0\",\"soc\":\"XXXXXXX\",\"j\":\"0\",\"g\":\"898604asdf0210\",\"h\":\"866968798839\",\"d\":\"1.3.5."
+		  "00.20991231\",\"f\":\"0\",\"k\":\"1\",\"l\":\"20000\",\"m\":\"20000\",\"u\":\"0\",\"v\":\"0\",\"e\":\"1\",\"w\":\"0."
 		  "00\",\"n\":\"0\",\"2h\":\"0\",\"o\":\"30\",\"1v\":\"12000\",\"2c\":\"0\",\"p\":\"1\",\"q\":\"1\",\"x\":\"0\",\"y\":"
 		  "\"167\",\"r\":\"0\",\"1x\":\"0\",\"1w\":\"0\",\"1y\":\"100.00\",\"1u\":\"0\"}";
 	printfJsonCompera(jsonstr);