#include "lib/lists.h"
#include "lib/unicode.h"
-#define KMP_GET_CHAR KMP_GET_RAW
+#define KMP_GET_CHAR(pos, c, flags) do{}while(0)
#include "lib/kmp.h"
#include <stdlib.h>
}
void
-kmp_enter_raw_string(struct kmp *kmp, const byte *str, uns id)
+kmp_enter_raw_string(struct kmp *kmp, kmp_char_t *str, uns id)
{
struct kmp_transition tr = { .next=NULL, .from=0 }, **prev;
struct kmp_output *new_out;
- const byte *orig_str = str;
uns len = 0;
kmp_char_t c = 'a';
- TRACE(20, "kmp.c: Entering string %s", str);
- kmp_get_char(&str, &c, 0);
+ TRACE(20, "kmp.c: Entering string");
+ c = *str++;
len++;
if (!c)
return;
if (!*prev)
break;
tr.from = (*prev)->to;
- kmp_get_char(&str, &c, 0);
+ c = *str++;
len++;
}
while (c)
**prev = tr;
add_tail(kmp->g.sons + tr.from, &(*prev)->n);
init_list(kmp->g.sons + tr.to);
- kmp_get_char(&str, &c, 0);
+ c = *str++;
len++;
tr.from = tr.to;
tr.c = c;
ASSERT(!*prev);
}
if (kmp->out[tr.from])
- TRACE(5, "kmp.c: string %s is inserted more than once", orig_str);
+ TRACE(5, "kmp.c: string is inserted more than once");
new_out = new_output(kmp, id, len-1);
merge_output(kmp->out + tr.from, new_out);
}
/* Pre-defined input functions */
-#define KMP_GET_RAW(pos, c, flags) do { uns cc; pos = utf8_get(pos, &cc); c=cc; } while(0)
+#define KMP_GET_UTF8(pos, c, flags) do { uns cc; pos = utf8_get(pos, &cc); c = cc; } while(0)
#define KMP_GET_ASCII(pos, c, flags) do { \
c = *pos++; \
/* kmp.c */
struct kmp *kmp_new(struct mempool *mp, int words_len, uns modify_flags);
-void kmp_enter_raw_string(struct kmp *kmp, const byte *str, uns id);
+void kmp_enter_raw_string(struct kmp *kmp, kmp_char_t *str, uns id);
void kmp_build(struct kmp *kmp);
static inline void
-kmp_get_char(const byte **str, kmp_char_t *c, uns modify_flags UNUSED)
+kmp_get_char(const byte **str UNUSED, kmp_char_t *c, uns modify_flags UNUSED)
{
while (1)
{
* to a conversion wrapper (this function) and the rest, which resides in kmp.c
* and uses KMP_GET_RAW to read its input.
*/
- byte buf[3*strlen(str)+1], *str2 = buf;
- kmp_char_t c = 0;
+ kmp_char_t buf[strlen(str)+1], *str2 = buf, c = 0;
do
{
kmp_get_char(&str, &c, kmp->modify_flags);
- str2 = utf8_put(str2, c);
+ *str2++ = c;
}
while (c);
kmp_enter_raw_string(kmp, buf, id);