diff options
author | HÃ¥vard Pettersen <havardpe@gmail.com> | 2017-02-21 15:04:19 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-21 15:04:19 +0100 |
commit | 39a1f0c32cac25e7f9376bf8125a262ca9b75f0f (patch) | |
tree | 361c115f354110bf7a507a72f7677c02ec996090 /vespalib | |
parent | fbfb2f35e85019df3408f76ee27413fba385fb48 (diff) | |
parent | 7333aed6134ac2cb60afc6bcb82c050f0ea217fc (diff) |
Merge pull request #1753 from yahoo/arnej/add-symbol-insertion
Arnej/add symbol insertion
Diffstat (limited to 'vespalib')
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 |