blob: de34f96b3eb3c11d7583f6b9adc514a37dea842d [file] [log] [blame]
Thomas Wouters477c8d52006-05-27 19:21:47 +00001/* stringlib: count implementation */
2
3#ifndef STRINGLIB_COUNT_H
4#define STRINGLIB_COUNT_H
5
6#ifndef STRINGLIB_FASTSEARCH_H
7#error must include "stringlib/fastsearch.h" before including this module
8#endif
9
10Py_LOCAL_INLINE(Py_ssize_t)
11stringlib_count(const STRINGLIB_CHAR* str, Py_ssize_t str_len,
Antoine Pitrouf2c54842010-01-13 08:07:53 +000012 const STRINGLIB_CHAR* sub, Py_ssize_t sub_len,
13 Py_ssize_t maxcount)
Thomas Wouters477c8d52006-05-27 19:21:47 +000014{
15 Py_ssize_t count;
16
Amaury Forgeot d'Arcf2e93682008-09-26 22:48:41 +000017 if (str_len < 0)
18 return 0; /* start > len(str) */
19 if (sub_len == 0)
Antoine Pitrouf2c54842010-01-13 08:07:53 +000020 return (str_len < maxcount) ? str_len + 1 : maxcount;
Thomas Wouters477c8d52006-05-27 19:21:47 +000021
Antoine Pitrouf2c54842010-01-13 08:07:53 +000022 count = fastsearch(str, str_len, sub, sub_len, maxcount, FAST_COUNT);
Thomas Wouters477c8d52006-05-27 19:21:47 +000023
24 if (count < 0)
Antoine Pitrouf2c54842010-01-13 08:07:53 +000025 return 0; /* no match */
Thomas Wouters477c8d52006-05-27 19:21:47 +000026
27 return count;
28}
29
30#endif