Add struct fields optimization
This commit is contained in:
parent
dcf4bf0f14
commit
c1cd7444cb
3 changed files with 26 additions and 18 deletions
|
@ -511,3 +511,5 @@
|
||||||
1400837774,11190990.08,4331119.44,45590.26,2587281.10
|
1400837774,11190990.08,4331119.44,45590.26,2587281.10
|
||||||
1400837785,10306507.50,3909290.89,47662.55,2827471.10
|
1400837785,10306507.50,3909290.89,47662.55,2827471.10
|
||||||
1400837797,10323334.38,4221122.48,55924.05,2294463.55
|
1400837797,10323334.38,4221122.48,55924.05,2294463.55
|
||||||
|
1400922358,11238818.94,4585324.58,59074.70,2649691.23
|
||||||
|
1400922668,10605016.95,4435942.19,52428.80,2805666.62
|
||||||
|
|
Can't render this file because it has a wrong number of fields in line 447.
|
24
include/r3.h
24
include/r3.h
|
@ -31,16 +31,21 @@ typedef struct _route route;
|
||||||
struct _node {
|
struct _node {
|
||||||
edge ** edges;
|
edge ** edges;
|
||||||
route ** routes;
|
route ** routes;
|
||||||
int edge_len;
|
|
||||||
int edge_cap;
|
// almost less than 255
|
||||||
int route_len;
|
unsigned char edge_len;
|
||||||
int route_cap;
|
unsigned char edge_cap;
|
||||||
int endpoint;
|
|
||||||
|
// almost less than 255
|
||||||
|
unsigned char route_len;
|
||||||
|
unsigned char route_cap;
|
||||||
|
|
||||||
|
unsigned char compare_type;
|
||||||
|
unsigned char endpoint;
|
||||||
|
|
||||||
/** compile-time variables here.... **/
|
/** compile-time variables here.... **/
|
||||||
|
|
||||||
/* the combined regexp pattern string from pattern_tokens */
|
/* the combined regexp pattern string from pattern_tokens */
|
||||||
int compare_type;
|
|
||||||
char * combined_pattern;
|
char * combined_pattern;
|
||||||
pcre * pcre_pattern;
|
pcre * pcre_pattern;
|
||||||
pcre_extra * pcre_extra;
|
pcre_extra * pcre_extra;
|
||||||
|
@ -49,15 +54,14 @@ struct _node {
|
||||||
* the pointer of route data
|
* the pointer of route data
|
||||||
*/
|
*/
|
||||||
void * data;
|
void * data;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _edge {
|
struct _edge {
|
||||||
char * pattern;
|
char * pattern;
|
||||||
int pattern_len;
|
|
||||||
int opcode;
|
|
||||||
bool has_slug;
|
|
||||||
node * child;
|
node * child;
|
||||||
|
unsigned char opcode;
|
||||||
|
unsigned short pattern_len;
|
||||||
|
bool has_slug:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
18
src/node.c
18
src/node.c
|
@ -254,13 +254,16 @@ node * r3_tree_matchl(const node * n, char * path, int path_len, match_entry * e
|
||||||
info("try matching: %s\n", path);
|
info("try matching: %s\n", path);
|
||||||
|
|
||||||
edge *e;
|
edge *e;
|
||||||
int rc;
|
char rc;
|
||||||
int i;
|
unsigned short i;
|
||||||
int ov_cnt;
|
unsigned short ov_cnt;
|
||||||
int restlen;
|
unsigned short restlen;
|
||||||
char *pp;
|
char *pp;
|
||||||
char *pp_end = path + path_len;
|
char *pp_end = path + path_len;
|
||||||
|
|
||||||
|
char *substring_start = NULL;
|
||||||
|
int substring_length = 0;
|
||||||
|
|
||||||
if (n->compare_type == NODE_COMPARE_OPCODE) {
|
if (n->compare_type == NODE_COMPARE_OPCODE) {
|
||||||
for (i = 0; i < n->edge_len ; i++ ) {
|
for (i = 0; i < n->edge_len ; i++ ) {
|
||||||
pp = path;
|
pp = path;
|
||||||
|
@ -333,8 +336,6 @@ node * r3_tree_matchl(const node * n, char * path, int path_len, match_entry * e
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char *substring_start;
|
|
||||||
int substring_length;
|
|
||||||
for (i = 1; i < rc; i++)
|
for (i = 1; i < rc; i++)
|
||||||
{
|
{
|
||||||
substring_start = path + ov[2*i];
|
substring_start = path + ov[2*i];
|
||||||
|
@ -372,6 +373,8 @@ node * r3_tree_matchl(const node * n, char * path, int path_len, match_entry * e
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
route * r3_tree_match_route(const node *tree, match_entry * entry) {
|
route * r3_tree_match_route(const node *tree, match_entry * entry) {
|
||||||
node *n;
|
node *n;
|
||||||
n = r3_tree_match_entry(tree, entry);
|
n = r3_tree_match_entry(tree, entry);
|
||||||
|
@ -387,8 +390,7 @@ route * r3_tree_match_route(const node *tree, match_entry * entry) {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline edge * r3_node_find_edge_str(const node * n, char * str, int str_len) {
|
inline edge * r3_node_find_edge_str(const node * n, char * str, int str_len) {
|
||||||
int i = 0;
|
unsigned short i = 0;
|
||||||
int matched_idx = -1;
|
|
||||||
char firstbyte = *str;
|
char firstbyte = *str;
|
||||||
for (; i < n->edge_len ; i++ ) {
|
for (; i < n->edge_len ; i++ ) {
|
||||||
if ( firstbyte == *(n->edges[i]->pattern) ) {
|
if ( firstbyte == *(n->edges[i]->pattern) ) {
|
||||||
|
|
Loading…
Reference in a new issue