summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorHÃ¥vard Pettersen <havardpe@gmail.com>2017-02-21 15:04:19 +0100
committerGitHub <noreply@github.com>2017-02-21 15:04:19 +0100
commit39a1f0c32cac25e7f9376bf8125a262ca9b75f0f (patch)
tree361c115f354110bf7a507a72f7677c02ec996090 /vespalib
parentfbfb2f35e85019df3408f76ee27413fba385fb48 (diff)
parent7333aed6134ac2cb60afc6bcb82c050f0ea217fc (diff)
Merge pull request #1753 from yahoo/arnej/add-symbol-insertion
Arnej/add symbol insertion
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/tests/slime/slime_test.cpp35
-rw-r--r--vespalib/src/vespa/vespalib/data/slime/array_value.cpp2
-rw-r--r--vespalib/src/vespa/vespalib/data/slime/array_value.h1
-rw-r--r--vespalib/src/vespa/vespalib/data/slime/convenience.h1
-rw-r--r--vespalib/src/vespa/vespalib/data/slime/cursor.h2
-rw-r--r--vespalib/src/vespa/vespalib/data/slime/object_value.cpp3
-rw-r--r--vespalib/src/vespa/vespalib/data/slime/object_value.h1
-rw-r--r--vespalib/src/vespa/vespalib/data/slime/value.cpp3
-rw-r--r--vespalib/src/vespa/vespalib/data/slime/value.h1
9 files changed, 48 insertions, 1 deletions
diff --git a/vespalib/src/tests/slime/slime_test.cpp b/vespalib/src/tests/slime/slime_test.cpp
index 9418a999cbb..e15bb26be53 100644
--- a/vespalib/src/tests/slime/slime_test.cpp
+++ b/vespalib/src/tests/slime/slime_test.cpp
@@ -362,4 +362,39 @@ TEST("require that slime objects can be compared") {
EXPECT_NOT_EQUAL(Slime().setArray(), Slime().setObject());
}
+TEST("require that we can resolve to symbol table from a cursor") {
+ Slime slime;
+ Cursor &c1 = slime.setObject();
+ Cursor &c2 = c1.setArray("foo");
+ Cursor &c3 = c1.setLong("bar", 5);
+ Cursor &c4 = c2.addObject();
+ const Memory A("a");
+ const Memory B("b");
+ const Memory C("c");
+ const Memory D("d");
+ EXPECT_TRUE(slime.lookup(A).undefined());
+ EXPECT_TRUE(slime.lookup(B).undefined());
+ EXPECT_TRUE(slime.lookup(C).undefined());
+ EXPECT_TRUE(slime.lookup(D).undefined());
+
+ Symbol sa = c1.resolve(A);
+ Symbol sb = c2.resolve(B);
+ Symbol sc = c3.resolve(C);
+ Symbol sd = c4.resolve(D);
+ EXPECT_TRUE(!sa.undefined());
+ EXPECT_TRUE(!sb.undefined());
+ EXPECT_TRUE(sc.undefined());
+ EXPECT_TRUE(!sd.undefined());
+
+ EXPECT_TRUE(!slime.lookup(A).undefined());
+ EXPECT_TRUE(!slime.lookup(B).undefined());
+ EXPECT_TRUE(slime.lookup(C).undefined());
+ EXPECT_TRUE(!slime.lookup(D).undefined());
+
+ EXPECT_TRUE(sa == slime.lookup(A));
+ EXPECT_TRUE(sb == slime.lookup(B));
+ EXPECT_TRUE(sc == slime.lookup(C));
+ EXPECT_TRUE(sd == slime.lookup(D));
+}
+
TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/vespalib/src/vespa/vespalib/data/slime/array_value.cpp b/vespalib/src/vespa/vespalib/data/slime/array_value.cpp
index 1d2fccc2f7a..2d0f9ce0f54 100644
--- a/vespalib/src/vespa/vespalib/data/slime/array_value.cpp
+++ b/vespalib/src/vespa/vespalib/data/slime/array_value.cpp
@@ -26,6 +26,8 @@ ArrayValue::addObject() {
return addLeaf(ObjectValueFactory(_symbolTable));
}
+Symbol
+ArrayValue::resolve(Memory symbol_name) { return _symbolTable.insert(symbol_name); }
} // namespace vespalib::slime
} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/data/slime/array_value.h b/vespalib/src/vespa/vespalib/data/slime/array_value.h
index b4f17015ef6..6d5178c39c3 100644
--- a/vespalib/src/vespa/vespalib/data/slime/array_value.h
+++ b/vespalib/src/vespa/vespalib/data/slime/array_value.h
@@ -49,6 +49,7 @@ public:
virtual Cursor &addArray();
virtual Cursor &addObject();
+ virtual Symbol resolve(Memory symbol_name);
virtual ~ArrayValue() { }
};
diff --git a/vespalib/src/vespa/vespalib/data/slime/convenience.h b/vespalib/src/vespa/vespalib/data/slime/convenience.h
index 445f8c8c7d5..991e4df2e38 100644
--- a/vespalib/src/vespa/vespalib/data/slime/convenience.h
+++ b/vespalib/src/vespa/vespalib/data/slime/convenience.h
@@ -32,6 +32,7 @@ using ::vespalib::slime::Inserter;
using ::vespalib::slime::SlimeInserter;
using ::vespalib::slime::ArrayInserter;
using ::vespalib::slime::ObjectInserter;
+using ::vespalib::slime::ObjectSymbolInserter;
using ::vespalib::slime::inject;
} // namespace vespalib::slime::convenience
diff --git a/vespalib/src/vespa/vespalib/data/slime/cursor.h b/vespalib/src/vespa/vespalib/data/slime/cursor.h
index 0e83fa379d3..cebb05a44ee 100644
--- a/vespalib/src/vespa/vespalib/data/slime/cursor.h
+++ b/vespalib/src/vespa/vespalib/data/slime/cursor.h
@@ -38,6 +38,8 @@ struct Cursor : public Inspector {
virtual Cursor &setData(Memory name, Memory str) = 0;
virtual Cursor &setArray(Memory name) = 0;
virtual Cursor &setObject(Memory name) = 0;
+
+ virtual Symbol resolve(Memory symbol_name) = 0;
};
} // namespace vespalib::slime
diff --git a/vespalib/src/vespa/vespalib/data/slime/object_value.cpp b/vespalib/src/vespa/vespalib/data/slime/object_value.cpp
index 515be5c8808..344448473d3 100644
--- a/vespalib/src/vespa/vespalib/data/slime/object_value.cpp
+++ b/vespalib/src/vespa/vespalib/data/slime/object_value.cpp
@@ -73,7 +73,8 @@ ObjectValue::setObject(Memory name) {
return setLeaf(name, ObjectValueFactory(_symbolTable));
}
-
+Symbol
+ObjectValue::resolve(Memory symbol_name) { return _symbolTable.insert(symbol_name); }
} // namespace vespalib::slime
} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/data/slime/object_value.h b/vespalib/src/vespa/vespalib/data/slime/object_value.h
index 039bc33d13c..fc647caca1b 100644
--- a/vespalib/src/vespa/vespalib/data/slime/object_value.h
+++ b/vespalib/src/vespa/vespalib/data/slime/object_value.h
@@ -79,6 +79,7 @@ public:
virtual Cursor &setArray(Memory name);
virtual Cursor &setObject(Memory name);
+ virtual Symbol resolve(Memory symbol_name);
virtual ~ObjectValue() { }
};
diff --git a/vespalib/src/vespa/vespalib/data/slime/value.cpp b/vespalib/src/vespa/vespalib/data/slime/value.cpp
index 3bc08c2bb3e..595cb0d4276 100644
--- a/vespalib/src/vespa/vespalib/data/slime/value.cpp
+++ b/vespalib/src/vespa/vespalib/data/slime/value.cpp
@@ -137,5 +137,8 @@ Value::setArray(Memory) { return *NixValue::invalid(); }
Cursor &
Value::setObject(Memory) { return *NixValue::invalid(); }
+Symbol
+Value::resolve(Memory) { return Symbol(); }
+
} // namespace vespalib::slime
} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/data/slime/value.h b/vespalib/src/vespa/vespalib/data/slime/value.h
index 7ed2d51ffa1..0324ae8d49a 100644
--- a/vespalib/src/vespa/vespalib/data/slime/value.h
+++ b/vespalib/src/vespa/vespalib/data/slime/value.h
@@ -78,6 +78,7 @@ public:
virtual Cursor &setArray(Memory name);
virtual Cursor &setObject(Memory name);
+ virtual Symbol resolve(Memory symbol_name);
};
} // namespace vespalib::slime