You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2013/09/02 21:16:36 UTC
[lucy-commits] [05/15] git commit: refs/heads/cfish-string-prep1 - Convert
Search::QueryParser to CharBuf
Convert Search::QueryParser to CharBuf
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/3a47204f
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/3a47204f
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/3a47204f
Branch: refs/heads/cfish-string-prep1
Commit: 3a47204fd82ee9845ff71aeeeea8e71cdb53c77e
Parents: b34f100
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Mon Sep 2 19:43:01 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon Sep 2 21:12:29 2013 +0200
----------------------------------------------------------------------
core/Lucy/Search/QueryParser.c | 27 +++++++++++++++------------
1 file changed, 15 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy/blob/3a47204f/core/Lucy/Search/QueryParser.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Search/QueryParser.c b/core/Lucy/Search/QueryParser.c
index 9728e55..0219432 100644
--- a/core/Lucy/Search/QueryParser.c
+++ b/core/Lucy/Search/QueryParser.c
@@ -20,6 +20,8 @@
#include "Lucy/Util/ToolSet.h"
#include "Lucy/Search/QueryParser.h"
+
+#include "Clownfish/CharBuf.h"
#include "Lucy/Search/QueryParser/ParserElem.h"
#include "Lucy/Search/QueryParser/QueryLexer.h"
#include "Lucy/Analysis/Analyzer.h"
@@ -823,13 +825,13 @@ QParser_Expand_IMP(QueryParser *self, Query *query) {
}
static String*
-S_unescape(QueryParser *self, String *orig, String *target) {
+S_unescape(QueryParser *self, String *orig, CharBuf *buf) {
StackString *source = SSTR_WRAP(orig);
uint32_t code_point;
UNUSED_VAR(self);
- Str_Set_Size(target, 0);
- Str_Grow(target, Str_Get_Size(orig) + 4);
+ CB_Set_Size(buf, 0);
+ CB_Grow(buf, Str_Get_Size(orig) + 4);
while (0 != (code_point = SStr_Nibble(source))) {
if (code_point == '\\') {
@@ -838,19 +840,19 @@ S_unescape(QueryParser *self, String *orig, String *target) {
|| next_code_point == '"'
|| next_code_point == '\\'
) {
- Str_Cat_Char(target, next_code_point);
+ CB_Cat_Char(buf, next_code_point);
}
else {
- Str_Cat_Char(target, code_point);
- if (next_code_point) { Str_Cat_Char(target, next_code_point); }
+ CB_Cat_Char(buf, code_point);
+ if (next_code_point) { CB_Cat_Char(buf, next_code_point); }
}
}
else {
- Str_Cat_Char(target, code_point);
+ CB_Cat_Char(buf, code_point);
}
}
- return target;
+ return CB_To_String(buf);
}
Query*
@@ -889,8 +891,8 @@ QParser_Expand_Leaf_IMP(QueryParser *self, Query *query) {
fields = (VArray*)INCREF(ivars->fields);
}
- String *unescaped = Str_new(SStr_Get_Size(source_text));
- VArray *queries = VA_new(VA_Get_Size(fields));
+ CharBuf *unescape_buf = CB_new(SStr_Get_Size(source_text));
+ VArray *queries = VA_new(VA_Get_Size(fields));
for (uint32_t i = 0, max = VA_Get_Size(fields); i < max; i++) {
String *field = (String*)VA_Fetch(fields, i);
Analyzer *analyzer = ivars->analyzer
@@ -905,7 +907,7 @@ QParser_Expand_Leaf_IMP(QueryParser *self, Query *query) {
else {
// Extract token texts.
String *split_source
- = S_unescape(self, (String*)source_text, unescaped);
+ = S_unescape(self, (String*)source_text, unescape_buf);
VArray *maybe_texts = Analyzer_Split(analyzer, split_source);
uint32_t num_maybe_texts = VA_Get_Size(maybe_texts);
VArray *token_texts = VA_new(num_maybe_texts);
@@ -935,6 +937,7 @@ QParser_Expand_Leaf_IMP(QueryParser *self, Query *query) {
DECREF(token_texts);
DECREF(maybe_texts);
+ DECREF(split_source);
}
}
@@ -953,7 +956,7 @@ QParser_Expand_Leaf_IMP(QueryParser *self, Query *query) {
}
// Clean up.
- DECREF(unescaped);
+ DECREF(unescape_buf);
DECREF(queries);
DECREF(fields);