@@ -23,10 +23,11 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include +#include #include #include "object.h" #include "string.h" @@ -145,10 +146,32 @@ str->data = new; str->len += append->len; return true; } + +size_t +cfw_string_find(CFWString *str, CFWString *substr, cfw_range_t range) +{ + size_t i; + + if (range.start > str->len) + return SIZE_MAX; + + if (range.length == SIZE_MAX) + range.length = str->len - range.start; + + if (range.start + range.length > str->len || substr->len > range.length) + return SIZE_MAX; + + for (i = range.start; i <= range.start + range.length - substr->len; + i++) + if (!memcmp(str->data + i, substr->data, substr->len)) + return i; + + return SIZE_MAX; +} static CFWClass class = { .name = "CFWString", .size = sizeof(CFWString), .ctor = ctor,