diff --git a/include/HByteStack.h b/include/HByteStack.h index 2353903..d91acdd 100644 --- a/include/HByteStack.h +++ b/include/HByteStack.h @@ -119,6 +119,9 @@ void HByteStackClear(HByteType *stackData); // 从栈顶开始查找, 成功返回位置, 失败返回 HBYTE_STACK_ERROR HByteLenType HByteStackFind(const HByteType *stackData, HByteDataType value); +// 从栈顶开始查找, 到pos索引结束, 成功返回位置, 失败返回 HBYTE_STACK_ERROR +HByteLenType HByteStackFindEx(const HByteType *stackData, HByteDataType value, HByteLenType endPos); + // 即当前栈位置 HByteLenType HByteStackGetUseLen(const HByteType *stackData); diff --git a/src/HByteStack.c b/src/HByteStack.c index ab8e725..104eae0 100644 --- a/src/HByteStack.c +++ b/src/HByteStack.c @@ -126,11 +126,15 @@ void HByteStackClear(HByteType *stackData) { } HByteLenType HByteStackFind(const HByteType *stackData, HByteDataType value) { - if (HByteStackEmpty(stackData)) { + return HByteStackFindEx(stackData, value, 0); +} + +HByteLenType HByteStackFindEx(const HByteType *stackData, HByteDataType value, HByteLenType endPos) { + if (endPos >= GetStackUseLen(stackData)) { return HBYTE_STACK_ERROR; } - for (HByteLenType i = GetStackUseLen(stackData); i-- > 0;) { + for (HByteLenType i = GetStackUseLen(stackData); i-- > endPos;) { if (GetStackData(stackData, i) == value) { return i; }