summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
184fd51)
These are used to denote attributes and PCDATA nodes.
git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/XMLTree@81
3cdefd35-fc62-479d-8e8d-
bae585ffb9ca
{\r
initialized = true;\r
finished = false;\r
{\r
initialized = true;\r
finished = false;\r
+ found_attributes = false;\r
npar = 0;\r
parArraySize = 1;\r
npar = 0;\r
parArraySize = 1;\r
\r
indexing_empty_texts = empty_texts;\r
\r
\r
indexing_empty_texts = empty_texts;\r
\r
+ TagName = (unsigned char **) malloc(2*sizeof(unsigned char*));\r
+ if (!TagName){\r
+ fprintf(stderr, "Error: not enough memory\n");\r
+ return NULLT;\r
+ }\r
+\r
+ TagName[0] = (unsigned char *) malloc(4*sizeof(unsigned char));\r
+ strcpy((char *) TagName[0], "<@>");\r
+\r
+ if (!TagName[0]){\r
+ fprintf(stderr, "Error: not enough memory\n");\r
+ return NULLT;\r
+ }\r
+\r
+ TagName[1] = (unsigned char *) malloc(4*sizeof(unsigned char));\r
+ if (!TagName[1]){\r
+ fprintf(stderr, "Error: not enough memory\n");\r
+ return NULLT;\r
+ }\r
+\r
+ strcpy((char *) TagName[1], "<$>");\r
+\r
\r
if (!indexing_empty_texts) {\r
empty_texts_aux = (unsigned int *)malloc(sizeof(unsigned int));\r
\r
if (!indexing_empty_texts) {\r
empty_texts_aux = (unsigned int *)malloc(sizeof(unsigned int));\r
static_permutation_builder * pmb = new static_permutation_builder_mrrr(PERM_SAMPLE, bmb);\r
static_sequence_builder * ssb = new static_sequence_builder_gmr_chunk(bmb, pmb);\r
\r
static_permutation_builder * pmb = new static_permutation_builder_mrrr(PERM_SAMPLE, bmb);\r
static_sequence_builder * ssb = new static_sequence_builder_gmr_chunk(bmb, pmb);\r
\r
- Tags = new static_sequence_gmr((uint *) tags_aux, (uint) npar-1,2*ntagnames, bmb, ssb);\r
+\r
+ // If we found an attribute then "<@>" is present in the tree\r
+ // if we didn't then it is not. "<$>" is never present in the tree\r
+ int ntagsize = found_attributes ? 2*ntagnames-1 : 2*ntagnames - 2;\r
+\r
+ Tags = new static_sequence_gmr((uint *) tags_aux, (uint) npar-1,ntagsize, bmb, ssb);\r
\r
delete bmb;\r
delete pmb;\r
\r
delete bmb;\r
delete pmb;\r
// transforms the tagname into a tag identifier. If the tag is new, we insert\r
// it in the table.\r
for (i=0; i<ntagnames; i++)\r
// transforms the tagname into a tag identifier. If the tag is new, we insert\r
// it in the table.\r
for (i=0; i<ntagnames; i++)\r
- if (strcmp((const char *)tagname,(const char *)TagName[i])==0) break;\r
+ if (strcmp((const char *)tagname,(const char *)TagName[i])==0) break;\r
+\r
+ // NewOpenTag("<@>") was called\r
+ if (i==0) \r
+ found_attributes=true;\r
+\r
if (i==ntagnames) { // the tag is a new one, then we insert it\r
TagName = (unsigned char **)realloc(TagName, sizeof(char *)*(ntagnames+1));\r
\r
if (i==ntagnames) { // the tag is a new one, then we insert it\r
TagName = (unsigned char **)realloc(TagName, sizeof(char *)*(ntagnames+1));\r
\r
int parArraySize;\r
int ntagnames;\r
unsigned int *empty_texts_aux;\r
int parArraySize;\r
int ntagnames;\r
unsigned int *empty_texts_aux;\r
+ bool found_attributes;\r