mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
optimize speed for strEqu
This commit is contained in:
parent
1748e306d6
commit
603d09febd
@ -297,14 +297,16 @@ char* PikaStdData_String_strip(PikaObj* self, PikaTuple* chrs) {
|
|||||||
char* str = strsCopy(&buffs, obj_getStr(self, "str"));
|
char* str = strsCopy(&buffs, obj_getStr(self, "str"));
|
||||||
/* strip */
|
/* strip */
|
||||||
char* str_start = str;
|
char* str_start = str;
|
||||||
for (size_t i = 0; i < strGetSize(str); i++) {
|
size_t len = strlen(str);
|
||||||
|
for (size_t i = 0; i < len; i++) {
|
||||||
if (str[i] != to_strip) {
|
if (str[i] != to_strip) {
|
||||||
str_start = (char*)(str + i);
|
str_start = (char*)(str + i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = strGetSize(str) - 1; i >= 0; i--) {
|
len = strlen(str);
|
||||||
|
for (int i = len - 1; i >= 0; i--) {
|
||||||
if (str[i] != to_strip) {
|
if (str[i] != to_strip) {
|
||||||
str[i + 1] = '\0';
|
str[i + 1] = '\0';
|
||||||
break;
|
break;
|
||||||
|
@ -297,14 +297,16 @@ char* PikaStdData_String_strip(PikaObj* self, PikaTuple* chrs) {
|
|||||||
char* str = strsCopy(&buffs, obj_getStr(self, "str"));
|
char* str = strsCopy(&buffs, obj_getStr(self, "str"));
|
||||||
/* strip */
|
/* strip */
|
||||||
char* str_start = str;
|
char* str_start = str;
|
||||||
for (size_t i = 0; i < strGetSize(str); i++) {
|
size_t len = strlen(str);
|
||||||
|
for (size_t i = 0; i < len; i++) {
|
||||||
if (str[i] != to_strip) {
|
if (str[i] != to_strip) {
|
||||||
str_start = (char*)(str + i);
|
str_start = (char*)(str + i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = strGetSize(str) - 1; i >= 0; i--) {
|
len = strlen(str);
|
||||||
|
for (int i = len - 1; i >= 0; i--) {
|
||||||
if (str[i] != to_strip) {
|
if (str[i] != to_strip) {
|
||||||
str[i + 1] = '\0';
|
str[i + 1] = '\0';
|
||||||
break;
|
break;
|
||||||
|
152
src/PikaVM.c
152
src/PikaVM.c
@ -566,18 +566,25 @@ static Arg* VM_instruction_handler_REF(PikaObj* self,
|
|||||||
char* arg_path = data;
|
char* arg_path = data;
|
||||||
char* arg_name = strPointToLastToken(arg_path, '.');
|
char* arg_name = strPointToLastToken(arg_path, '.');
|
||||||
PIKA_BOOL is_temp = PIKA_FALSE;
|
PIKA_BOOL is_temp = PIKA_FALSE;
|
||||||
|
|
||||||
|
switch (data[0]) {
|
||||||
|
case 'T':
|
||||||
if (strEqu(arg_path, (char*)"True")) {
|
if (strEqu(arg_path, (char*)"True")) {
|
||||||
return arg_setInt(arg_ret_reg, "", 1);
|
return arg_setInt(arg_ret_reg, "", 1);
|
||||||
}
|
}
|
||||||
|
case 'F':
|
||||||
if (strEqu(arg_path, (char*)"False")) {
|
if (strEqu(arg_path, (char*)"False")) {
|
||||||
return arg_setInt(arg_ret_reg, "", 0);
|
return arg_setInt(arg_ret_reg, "", 0);
|
||||||
}
|
}
|
||||||
|
case 'N':
|
||||||
if (strEqu(arg_path, (char*)"None")) {
|
if (strEqu(arg_path, (char*)"None")) {
|
||||||
return arg_setNull(arg_ret_reg);
|
return arg_setNull(arg_ret_reg);
|
||||||
}
|
}
|
||||||
|
case 'R':
|
||||||
if (strEqu(arg_path, (char*)"RuntimeError")) {
|
if (strEqu(arg_path, (char*)"RuntimeError")) {
|
||||||
return arg_setInt(arg_ret_reg, "", PIKA_RES_ERR_RUNTIME_ERROR);
|
return arg_setInt(arg_ret_reg, "", PIKA_RES_ERR_RUNTIME_ERROR);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Arg* res = NULL;
|
Arg* res = NULL;
|
||||||
if (arg_path[0] == '.') {
|
if (arg_path[0] == '.') {
|
||||||
@ -1345,7 +1352,8 @@ static char* __get_transferd_str(Args* buffs, char* str, size_t* iout_p) {
|
|||||||
|
|
||||||
char* transfered_str = args_getBuff(buffs, strGetSize(str_rep));
|
char* transfered_str = args_getBuff(buffs, strGetSize(str_rep));
|
||||||
size_t i_out = 0;
|
size_t i_out = 0;
|
||||||
for (size_t i = 0; i < strGetSize(str_rep); i++) {
|
size_t len = strGetSize(str_rep);
|
||||||
|
for (size_t i = 0; i < len; i++) {
|
||||||
/* eg. replace '\x33' to '3' */
|
/* eg. replace '\x33' to '3' */
|
||||||
if ((str_rep[i] == '\\') && (str_rep[i + 1] == 'x')) {
|
if ((str_rep[i] == '\\') && (str_rep[i + 1] == 'x')) {
|
||||||
char hex_str[] = "0x00";
|
char hex_str[] = "0x00";
|
||||||
@ -1529,29 +1537,32 @@ static Arg* VM_instruction_handler_NUM(PikaObj* self,
|
|||||||
VMState* vm,
|
VMState* vm,
|
||||||
char* data,
|
char* data,
|
||||||
Arg* arg_ret_reg) {
|
Arg* arg_ret_reg) {
|
||||||
Arg* numArg = arg_ret_reg;
|
/* fast return */
|
||||||
|
if (data[1] == '\0') {
|
||||||
|
return arg_setInt(arg_ret_reg, "", data[0] - '0');
|
||||||
|
}
|
||||||
/* hex */
|
/* hex */
|
||||||
if (data[1] == 'x' || data[1] == 'X') {
|
if (data[1] == 'x' || data[1] == 'X') {
|
||||||
return arg_setInt(numArg, "", strtoll(data, NULL, 0));
|
return arg_setInt(arg_ret_reg, "", strtoll(data, NULL, 0));
|
||||||
}
|
}
|
||||||
if (data[1] == 'o' || data[1] == 'O') {
|
if (data[1] == 'o' || data[1] == 'O') {
|
||||||
char strtoll_buff[10] = {0};
|
char strtoll_buff[10] = {0};
|
||||||
strtoll_buff[0] = '0';
|
strtoll_buff[0] = '0';
|
||||||
__platform_memcpy(strtoll_buff + 1, data + 2, strGetSize(data) - 2);
|
__platform_memcpy(strtoll_buff + 1, data + 2, strGetSize(data) - 2);
|
||||||
return arg_setInt(numArg, "", strtoll(strtoll_buff, NULL, 0));
|
return arg_setInt(arg_ret_reg, "", strtoll(strtoll_buff, NULL, 0));
|
||||||
}
|
}
|
||||||
if (data[1] == 'b' || data[1] == 'B') {
|
if (data[1] == 'b' || data[1] == 'B') {
|
||||||
char strtoll_buff[10] = {0};
|
char strtoll_buff[10] = {0};
|
||||||
__platform_memcpy(strtoll_buff, data + 2, strGetSize(data) - 2);
|
__platform_memcpy(strtoll_buff, data + 2, strGetSize(data) - 2);
|
||||||
return arg_setInt(numArg, "", strtoll(strtoll_buff, NULL, 2));
|
return arg_setInt(arg_ret_reg, "", strtoll(strtoll_buff, NULL, 2));
|
||||||
}
|
}
|
||||||
/* float */
|
/* float */
|
||||||
if (strIsContain(data, '.') ||
|
if (strIsContain(data, '.') ||
|
||||||
(strIsContain(data, 'e') || strIsContain(data, 'E'))) {
|
(strIsContain(data, 'e') || strIsContain(data, 'E'))) {
|
||||||
return arg_setFloat(numArg, "", strtod(data, NULL));
|
return arg_setFloat(arg_ret_reg, "", strtod(data, NULL));
|
||||||
}
|
}
|
||||||
/* int */
|
/* int */
|
||||||
return arg_setInt(numArg, "", fast_atoi(data));
|
return arg_setInt(arg_ret_reg, "", fast_atoi(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
static Arg* VM_instruction_handler_JMP(PikaObj* self,
|
static Arg* VM_instruction_handler_JMP(PikaObj* self,
|
||||||
@ -1664,14 +1675,14 @@ void operatorInfo_init(OperatorInfo* info,
|
|||||||
info->f1 = (pika_float)info->i1;
|
info->f1 = (pika_float)info->i1;
|
||||||
} else if (info->t1 == ARG_TYPE_FLOAT) {
|
} else if (info->t1 == ARG_TYPE_FLOAT) {
|
||||||
info->f1 = arg_getFloat(info->a1);
|
info->f1 = arg_getFloat(info->a1);
|
||||||
info->i1 = (int)info->f1;
|
info->i1 = (int64_t)info->f1;
|
||||||
}
|
}
|
||||||
if (info->t2 == ARG_TYPE_INT) {
|
if (info->t2 == ARG_TYPE_INT) {
|
||||||
info->i2 = arg_getInt(info->a2);
|
info->i2 = arg_getInt(info->a2);
|
||||||
info->f2 = (pika_float)info->i2;
|
info->f2 = (pika_float)info->i2;
|
||||||
} else if (info->t2 == ARG_TYPE_FLOAT) {
|
} else if (info->t2 == ARG_TYPE_FLOAT) {
|
||||||
info->f2 = arg_getFloat(info->a2);
|
info->f2 = arg_getFloat(info->a2);
|
||||||
info->i2 = (int)info->f2;
|
info->i2 = (int64_t)info->f2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1895,19 +1906,11 @@ static Arg* VM_instruction_handler_OPT(PikaObj* self,
|
|||||||
}
|
}
|
||||||
/* init operator info */
|
/* init operator info */
|
||||||
operatorInfo_init(&op, self, vm, data, arg_ret_reg);
|
operatorInfo_init(&op, self, vm, data, arg_ret_reg);
|
||||||
if (data[0] == '<' && data[1] == 0) {
|
switch (data[0]) {
|
||||||
op.res = arg_setInt(op.res, "", op.f1 < op.f2);
|
case '+':
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
if (data[0] == '+') {
|
|
||||||
_OPT_ADD(&op);
|
_OPT_ADD(&op);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
case '%':
|
||||||
if (data[1] == '=' && (data[0] == '!' || data[0] == '=')) {
|
|
||||||
_OPT_EQU(&op);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
if (data[0] == '%') {
|
|
||||||
if ((op.t1 == ARG_TYPE_INT) && (op.t2 == ARG_TYPE_INT)) {
|
if ((op.t1 == ARG_TYPE_INT) && (op.t2 == ARG_TYPE_INT)) {
|
||||||
op.res = arg_setInt(op.res, "", op.i1 % op.i2);
|
op.res = arg_setInt(op.res, "", op.i1 % op.i2);
|
||||||
goto exit;
|
goto exit;
|
||||||
@ -1917,18 +1920,70 @@ static Arg* VM_instruction_handler_OPT(PikaObj* self,
|
|||||||
"TypeError: unsupported operand type(s) for %: 'float'\n");
|
"TypeError: unsupported operand type(s) for %: 'float'\n");
|
||||||
op.res = NULL;
|
op.res = NULL;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
case '-':
|
||||||
if (data[0] == '-') {
|
|
||||||
_OPT_SUB(&op);
|
_OPT_SUB(&op);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
if (data[0] == '*' && data[1] == 0) {
|
if (data[1] == '=' && (data[0] == '!' || data[0] == '=')) {
|
||||||
|
_OPT_EQU(&op);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if (data[1] == 0) {
|
||||||
|
switch (data[0]) {
|
||||||
|
case '<':
|
||||||
|
op.res = arg_setInt(op.res, "", op.f1 < op.f2);
|
||||||
|
goto exit;
|
||||||
|
case '*':
|
||||||
if ((op.t1 == ARG_TYPE_FLOAT) || op.t2 == ARG_TYPE_FLOAT) {
|
if ((op.t1 == ARG_TYPE_FLOAT) || op.t2 == ARG_TYPE_FLOAT) {
|
||||||
op.res = arg_setFloat(op.res, "", op.f1 * op.f2);
|
op.res = arg_setFloat(op.res, "", op.f1 * op.f2);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
op.res = arg_setInt(op.res, "", op.i1 * op.i2);
|
op.res = arg_setInt(op.res, "", op.i1 * op.i2);
|
||||||
goto exit;
|
goto exit;
|
||||||
|
case '&':
|
||||||
|
if ((op.t1 == ARG_TYPE_INT) && (op.t2 == ARG_TYPE_INT)) {
|
||||||
|
op.res = arg_setInt(op.res, "", op.i1 & op.i2);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
VMState_setErrorCode(vm, PIKA_RES_ERR_OPERATION_FAILED);
|
||||||
|
__platform_printf(
|
||||||
|
"TypeError: unsupported operand type(s) for &: 'float'\n");
|
||||||
|
op.res = NULL;
|
||||||
|
goto exit;
|
||||||
|
case '|':
|
||||||
|
if ((op.t1 == ARG_TYPE_INT) && (op.t2 == ARG_TYPE_INT)) {
|
||||||
|
op.res = arg_setInt(op.res, "", op.i1 | op.i2);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
VMState_setErrorCode(vm, PIKA_RES_ERR_OPERATION_FAILED);
|
||||||
|
__platform_printf(
|
||||||
|
"TypeError: unsupported operand type(s) for |: 'float'\n");
|
||||||
|
op.res = NULL;
|
||||||
|
goto exit;
|
||||||
|
case '~':
|
||||||
|
if (op.t2 == ARG_TYPE_INT) {
|
||||||
|
op.res = arg_setInt(op.res, "", ~op.i2);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
VMState_setErrorCode(vm, PIKA_RES_ERR_OPERATION_FAILED);
|
||||||
|
__platform_printf(
|
||||||
|
"TypeError: unsupported operand type(s) for ~: 'float'\n");
|
||||||
|
op.res = NULL;
|
||||||
|
goto exit;
|
||||||
|
case '/':
|
||||||
|
if (0 == op.f2) {
|
||||||
|
VMState_setErrorCode(vm, PIKA_RES_ERR_OPERATION_FAILED);
|
||||||
|
args_setSysOut(vm->locals->list,
|
||||||
|
"ZeroDivisionError: division by zero");
|
||||||
|
op.res = NULL;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
op.res = arg_setFloat(op.res, "", op.f1 / op.f2);
|
||||||
|
goto exit;
|
||||||
|
case '>':
|
||||||
|
op.res = arg_setInt(op.res, "", op.f1 > op.f2);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (data[1] == 'i' && data[2] == 'n') {
|
if (data[1] == 'i' && data[2] == 'n') {
|
||||||
if (op.t1 == ARG_TYPE_STRING && op.t2 == ARG_TYPE_STRING) {
|
if (op.t1 == ARG_TYPE_STRING && op.t2 == ARG_TYPE_STRING) {
|
||||||
@ -1974,21 +2029,6 @@ static Arg* VM_instruction_handler_OPT(PikaObj* self,
|
|||||||
op.res = NULL;
|
op.res = NULL;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
if (data[0] == '/' && data[1] == 0) {
|
|
||||||
if (0 == op.f2) {
|
|
||||||
VMState_setErrorCode(vm, PIKA_RES_ERR_OPERATION_FAILED);
|
|
||||||
args_setSysOut(vm->locals->list,
|
|
||||||
"ZeroDivisionError: division by zero");
|
|
||||||
op.res = NULL;
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
op.res = arg_setFloat(op.res, "", op.f1 / op.f2);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
if (data[0] == '>' && data[1] == 0) {
|
|
||||||
op.res = arg_setInt(op.res, "", op.f1 > op.f2);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
if (data[0] == '*' && data[1] == '*') {
|
if (data[0] == '*' && data[1] == '*') {
|
||||||
_OPT_POW(&op);
|
_OPT_POW(&op);
|
||||||
goto exit;
|
goto exit;
|
||||||
@ -2031,39 +2071,6 @@ static Arg* VM_instruction_handler_OPT(PikaObj* self,
|
|||||||
((op.f1 - op.f2) * (op.f1 - op.f2) < (pika_float)0.000001));
|
((op.f1 - op.f2) * (op.f1 - op.f2) < (pika_float)0.000001));
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
if (data[0] == '&' && data[1] == 0) {
|
|
||||||
if ((op.t1 == ARG_TYPE_INT) && (op.t2 == ARG_TYPE_INT)) {
|
|
||||||
op.res = arg_setInt(op.res, "", op.i1 & op.i2);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
VMState_setErrorCode(vm, PIKA_RES_ERR_OPERATION_FAILED);
|
|
||||||
__platform_printf(
|
|
||||||
"TypeError: unsupported operand type(s) for &: 'float'\n");
|
|
||||||
op.res = NULL;
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
if (data[0] == '|' && data[1] == 0) {
|
|
||||||
if ((op.t1 == ARG_TYPE_INT) && (op.t2 == ARG_TYPE_INT)) {
|
|
||||||
op.res = arg_setInt(op.res, "", op.i1 | op.i2);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
VMState_setErrorCode(vm, PIKA_RES_ERR_OPERATION_FAILED);
|
|
||||||
__platform_printf(
|
|
||||||
"TypeError: unsupported operand type(s) for |: 'float'\n");
|
|
||||||
op.res = NULL;
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
if (data[0] == '~' && data[1] == 0) {
|
|
||||||
if (op.t2 == ARG_TYPE_INT) {
|
|
||||||
op.res = arg_setInt(op.res, "", ~op.i2);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
VMState_setErrorCode(vm, PIKA_RES_ERR_OPERATION_FAILED);
|
|
||||||
__platform_printf(
|
|
||||||
"TypeError: unsupported operand type(s) for ~: 'float'\n");
|
|
||||||
op.res = NULL;
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
if (data[0] == '>' && data[1] == '>') {
|
if (data[0] == '>' && data[1] == '>') {
|
||||||
if ((op.t1 == ARG_TYPE_INT) && (op.t2 == ARG_TYPE_INT)) {
|
if ((op.t1 == ARG_TYPE_INT) && (op.t2 == ARG_TYPE_INT)) {
|
||||||
op.res = arg_setInt(op.res, "", op.i1 >> op.i2);
|
op.res = arg_setInt(op.res, "", op.i1 >> op.i2);
|
||||||
@ -2963,7 +2970,8 @@ void constPool_printAsArray(ConstPool* self) {
|
|||||||
}
|
}
|
||||||
char* data_each = constPool_getNow(self);
|
char* data_each = constPool_getNow(self);
|
||||||
/* todo start */
|
/* todo start */
|
||||||
for (uint32_t i = 0; i < strGetSize(data_each) + 1; i++) {
|
size_t len = strlen(data_each);
|
||||||
|
for (uint32_t i = 0; i < len + 1; i++) {
|
||||||
__platform_printf("0x%02x, ", *(data_each + (uintptr_t)i));
|
__platform_printf("0x%02x, ", *(data_each + (uintptr_t)i));
|
||||||
g_i++;
|
g_i++;
|
||||||
if (g_i % line_num == 0) {
|
if (g_i % line_num == 0) {
|
||||||
|
@ -92,8 +92,8 @@ struct OperatorInfo {
|
|||||||
Arg* a2;
|
Arg* a2;
|
||||||
pika_float f1;
|
pika_float f1;
|
||||||
pika_float f2;
|
pika_float f2;
|
||||||
int i1;
|
int64_t i1;
|
||||||
int i2;
|
int64_t i2;
|
||||||
Arg* res;
|
Arg* res;
|
||||||
int num;
|
int num;
|
||||||
VMState* vm;
|
VMState* vm;
|
||||||
|
@ -245,12 +245,6 @@ void pool_free(Pool* pool, void* mem, uint32_t size) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t aline_by(uint32_t size, uint32_t aline) {
|
|
||||||
if (size == 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return ((size - 1) / aline + 1) * aline;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitMap bitmap_init(uint32_t size) {
|
BitMap bitmap_init(uint32_t size) {
|
||||||
BitMap mem_bit_map =
|
BitMap mem_bit_map =
|
||||||
|
@ -60,14 +60,15 @@ struct Pool{
|
|||||||
};
|
};
|
||||||
/* clang-format on */
|
/* clang-format on */
|
||||||
|
|
||||||
|
#define aline_by(size, aline) \
|
||||||
|
(((size) == 0) ? 0 : (((size)-1) / (aline) + 1) * (aline))
|
||||||
|
|
||||||
void pikaFree(void* mem, uint32_t size);
|
void pikaFree(void* mem, uint32_t size);
|
||||||
void* pikaMalloc(uint32_t size);
|
void* pikaMalloc(uint32_t size);
|
||||||
uint32_t pikaMemNow(void);
|
uint32_t pikaMemNow(void);
|
||||||
uint32_t pikaMemMax(void);
|
uint32_t pikaMemMax(void);
|
||||||
void pikaMemMaxReset(void);
|
void pikaMemMaxReset(void);
|
||||||
|
|
||||||
uint32_t aline_by(uint32_t size, uint32_t aline);
|
|
||||||
|
|
||||||
BitMap bitmap_init(uint32_t size);
|
BitMap bitmap_init(uint32_t size);
|
||||||
void bitmap_set(BitMap bitmap, uint32_t index, uint8_t bit);
|
void bitmap_set(BitMap bitmap, uint32_t index, uint8_t bit);
|
||||||
uint8_t bitmap_get(BitMap bitmap, uint32_t index);
|
uint8_t bitmap_get(BitMap bitmap, uint32_t index);
|
||||||
|
@ -92,7 +92,8 @@ char* strAppendWithSize(char* strOut, char* pData, int32_t Size) {
|
|||||||
|
|
||||||
int32_t strCountSign(char* strIn, char sign) {
|
int32_t strCountSign(char* strIn, char sign) {
|
||||||
int32_t count = 0;
|
int32_t count = 0;
|
||||||
for (uint32_t i = 0; i < strGetSize(strIn); i++) {
|
size_t len = strGetSize(strIn);
|
||||||
|
for (uint32_t i = 0; i < len; i++) {
|
||||||
if (sign == strIn[i]) {
|
if (sign == strIn[i]) {
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@ -217,15 +218,16 @@ char* strRemovePrefix(char* inputStr, char* prefix, char* outputStr) {
|
|||||||
if (!strIsStartWith(inputStr, prefix)) {
|
if (!strIsStartWith(inputStr, prefix)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
size_t len = strGetSize(inputStr);
|
||||||
for (uint32_t i = strGetSize(prefix); i < strGetSize(inputStr); i++) {
|
for (uint32_t i = strGetSize(prefix); i < len; i++) {
|
||||||
outputStr[i - strGetSize(prefix)] = inputStr[i];
|
outputStr[i - strGetSize(prefix)] = inputStr[i];
|
||||||
}
|
}
|
||||||
return outputStr;
|
return outputStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t strIsContain(char* str, char ch) {
|
int32_t strIsContain(char* str, char ch) {
|
||||||
for (uint32_t i = 0; i < strGetSize(str); i++) {
|
size_t len = strGetSize(str);
|
||||||
|
for (uint32_t i = 0; i < len; i++) {
|
||||||
if (str[i] == ch) {
|
if (str[i] == ch) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user