Add OP_EXPECT_MORE_ALPHA opcode
This commit is contained in:
parent
5f75677369
commit
628f09a8f4
4 changed files with 23 additions and 22 deletions
|
@ -181,6 +181,6 @@ int r3_pattern_to_opcode(char * pattern, int pattern_len);
|
||||||
|
|
||||||
enum { NODE_COMPARE_STR, NODE_COMPARE_PCRE, NODE_COMPARE_OPCODE };
|
enum { NODE_COMPARE_STR, NODE_COMPARE_PCRE, NODE_COMPARE_OPCODE };
|
||||||
|
|
||||||
enum { OP_EXPECT_DIGITS = 1, OP_EXPECT_WORDS, OP_EXPECT_NOSLASH, OP_EXPECT_NODASH };
|
enum { OP_EXPECT_MORE_DIGITS = 1, OP_EXPECT_MORE_WORDS, OP_EXPECT_NOSLASH, OP_EXPECT_NODASH, OP_EXPECT_MORE_ALPHA };
|
||||||
|
|
||||||
#endif /* !R3_NODE_H */
|
#endif /* !R3_NODE_H */
|
||||||
|
|
26
src/node.c
26
src/node.c
|
@ -8,9 +8,6 @@
|
||||||
// PCRE
|
// PCRE
|
||||||
#include <pcre.h>
|
#include <pcre.h>
|
||||||
|
|
||||||
// Judy array
|
|
||||||
// #include <Judy.h>
|
|
||||||
|
|
||||||
#include "r3.h"
|
#include "r3.h"
|
||||||
#include "r3_str.h"
|
#include "r3_str.h"
|
||||||
#include "str_array.h"
|
#include "str_array.h"
|
||||||
|
@ -270,24 +267,19 @@ node * r3_tree_matchl(const node * n, char * path, int path_len, match_entry * e
|
||||||
e = n->edges[i];
|
e = n->edges[i];
|
||||||
switch(e->opcode) {
|
switch(e->opcode) {
|
||||||
case OP_EXPECT_NOSLASH:
|
case OP_EXPECT_NOSLASH:
|
||||||
while (*pp != '/' && pp < pp_end) {
|
while (*pp != '/' && pp < pp_end) pp++;
|
||||||
pp++;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case OP_EXPECT_DIGITS:
|
case OP_EXPECT_MORE_ALPHA:
|
||||||
while ( isdigit(*pp) && pp < pp_end) {
|
while ( isalpha(*pp) && pp < pp_end) pp++;
|
||||||
pp++;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case OP_EXPECT_WORDS:
|
case OP_EXPECT_MORE_DIGITS:
|
||||||
while ( (isdigit(*pp) || isalpha(*pp)) && pp < pp_end) {
|
while ( isdigit(*pp) && pp < pp_end) pp++;
|
||||||
pp++;
|
break;
|
||||||
}
|
case OP_EXPECT_MORE_WORDS:
|
||||||
|
while ( (isdigit(*pp) || isalpha(*pp)) && pp < pp_end) pp++;
|
||||||
break;
|
break;
|
||||||
case OP_EXPECT_NODASH:
|
case OP_EXPECT_NODASH:
|
||||||
while (*pp != '-' && pp < pp_end) {
|
while (*pp != '-' && pp < pp_end) pp++;
|
||||||
pp++;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// check match
|
// check match
|
||||||
|
|
13
src/str.c
13
src/str.c
|
@ -15,10 +15,19 @@
|
||||||
|
|
||||||
int r3_pattern_to_opcode(char * pattern, int len) {
|
int r3_pattern_to_opcode(char * pattern, int len) {
|
||||||
if ( strncmp(pattern, "\\w+",len) == 0 ) {
|
if ( strncmp(pattern, "\\w+",len) == 0 ) {
|
||||||
return OP_EXPECT_WORDS;
|
return OP_EXPECT_MORE_WORDS;
|
||||||
|
}
|
||||||
|
if ( strncmp(pattern, "[0-9a-z]+",len) == 0 || strncmp(pattern, "[a-z0-9]+",len) == 0 ) {
|
||||||
|
return OP_EXPECT_MORE_WORDS;
|
||||||
|
}
|
||||||
|
if ( strncmp(pattern, "[a-z]+",len) == 0 ) {
|
||||||
|
return OP_EXPECT_MORE_ALPHA;
|
||||||
}
|
}
|
||||||
if ( strncmp(pattern, "\\d+", len) == 0 ) {
|
if ( strncmp(pattern, "\\d+", len) == 0 ) {
|
||||||
return OP_EXPECT_DIGITS;
|
return OP_EXPECT_MORE_DIGITS;
|
||||||
|
}
|
||||||
|
if ( strncmp(pattern, "[0-9]+", len) == 0 ) {
|
||||||
|
return OP_EXPECT_MORE_DIGITS;
|
||||||
}
|
}
|
||||||
if ( strncmp(pattern, "[^/]+", len) == 0 ) {
|
if ( strncmp(pattern, "[^/]+", len) == 0 ) {
|
||||||
return OP_EXPECT_NOSLASH;
|
return OP_EXPECT_NOSLASH;
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
|
|
||||||
START_TEST (test_pattern_to_opcode)
|
START_TEST (test_pattern_to_opcode)
|
||||||
{
|
{
|
||||||
ck_assert( r3_pattern_to_opcode("\\w+", strlen("\\w+")) == OP_EXPECT_WORDS );
|
ck_assert( r3_pattern_to_opcode("\\w+", strlen("\\w+")) == OP_EXPECT_MORE_WORDS );
|
||||||
ck_assert( r3_pattern_to_opcode("\\d+", strlen("\\d+")) == OP_EXPECT_DIGITS );
|
ck_assert( r3_pattern_to_opcode("\\d+", strlen("\\d+")) == OP_EXPECT_MORE_DIGITS );
|
||||||
ck_assert( r3_pattern_to_opcode("[^/]+",strlen("[^/]+")) == OP_EXPECT_NOSLASH );
|
ck_assert( r3_pattern_to_opcode("[^/]+",strlen("[^/]+")) == OP_EXPECT_NOSLASH );
|
||||||
ck_assert( r3_pattern_to_opcode("[^-]+",strlen("[^-]+")) == OP_EXPECT_NODASH );
|
ck_assert( r3_pattern_to_opcode("[^-]+",strlen("[^-]+")) == OP_EXPECT_NODASH );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue