From 474da0ab05ba58999f4d4840d62902b81f5378a9 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Sun, 6 Feb 2022 15:56:27 +0100 Subject: - Generate mode modern c++ code. - Use existing predefined types. - Allow for better management by allowing large string vectors to be mmapped. --- config/src/tests/configagent/configagent.cpp | 2 +- config/src/tests/configgen/map_inserter.cpp | 2 +- config/src/tests/configgen/vector_inserter.cpp | 30 +++-- config/src/tests/configmanager/configmanager.cpp | 2 +- config/src/tests/configparser/configparser.cpp | 3 +- config/src/vespa/config/common/configparser.cpp | 55 +++++---- config/src/vespa/config/common/configparser.h | 127 ++++++++++++--------- config/src/vespa/config/common/configstate.h | 1 - config/src/vespa/config/common/misc.cpp | 10 ++ config/src/vespa/config/common/misc.h | 3 + config/src/vespa/config/common/types.h | 4 +- config/src/vespa/config/configgen/map_inserter.h | 12 +- config/src/vespa/config/configgen/map_inserter.hpp | 9 +- .../src/vespa/config/configgen/value_converter.cpp | 2 +- .../src/vespa/config/configgen/value_converter.h | 4 +- .../src/vespa/config/configgen/vector_inserter.h | 17 +-- .../src/vespa/config/configgen/vector_inserter.hpp | 17 +-- config/src/vespa/config/file/filesource.cpp | 2 +- config/src/vespa/config/raw/rawsource.cpp | 2 +- .../config/set/configinstancesourcefactory.cpp | 2 +- config/src/vespa/config/set/configsetsource.cpp | 2 +- 21 files changed, 176 insertions(+), 132 deletions(-) (limited to 'config') diff --git a/config/src/tests/configagent/configagent.cpp b/config/src/tests/configagent/configagent.cpp index 4843b2f0647..10f321c181d 100644 --- a/config/src/tests/configagent/configagent.cpp +++ b/config/src/tests/configagent/configagent.cpp @@ -114,7 +114,7 @@ private: ConfigValue createValue(const std::string & myField, const std::string & xxhash64) { - std::vector< vespalib::string > lines; + StringVector lines; lines.push_back("myField \"" + myField + "\""); return ConfigValue(lines, xxhash64); } diff --git a/config/src/tests/configgen/map_inserter.cpp b/config/src/tests/configgen/map_inserter.cpp index 2a37d401792..bf1b856972e 100644 --- a/config/src/tests/configgen/map_inserter.cpp +++ b/config/src/tests/configgen/map_inserter.cpp @@ -1,8 +1,8 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include -#include #include +#include using namespace config; using namespace config::internal; diff --git a/config/src/tests/configgen/vector_inserter.cpp b/config/src/tests/configgen/vector_inserter.cpp index b8611317650..e2b0d7c875f 100644 --- a/config/src/tests/configgen/vector_inserter.cpp +++ b/config/src/tests/configgen/vector_inserter.cpp @@ -1,7 +1,8 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include -#include +#include +#include #include using namespace config; @@ -27,7 +28,7 @@ TEST("require that vector of ints can be inserted") { root.addLong(3); root.addLong(2); root.addLong(6); - VectorInserter inserter(vector); + VectorInserter inserter(vector); root.traverse(inserter); ASSERT_EQUAL(3u, vector.size()); ASSERT_EQUAL(3, vector[0]); @@ -45,7 +46,7 @@ TEST("require that vector of struct can be inserted") { Cursor & two = root.addObject(); two.setLong("foo", 1); two.setLong("bar", 6); - VectorInserter inserter(typeVector); + VectorInserter inserter(typeVector); root.traverse(inserter); ASSERT_EQUAL(2u, typeVector.size()); ASSERT_EQUAL(3, typeVector[0].foo); @@ -61,7 +62,7 @@ TEST("require that vector of long can be inserted") { root.addLong(3); root.addLong(2); root.addLong(6); - VectorInserter inserter(vector); + VectorInserter inserter(vector); root.traverse(inserter); ASSERT_EQUAL(3u, vector.size()); ASSERT_EQUAL(3, vector[0]); @@ -76,7 +77,7 @@ TEST("require that vector of double can be inserted") { root.addDouble(3.1); root.addDouble(2.4); root.addDouble(6.6); - VectorInserter inserter(vector); + VectorInserter inserter(vector); root.traverse(inserter); ASSERT_EQUAL(3u, vector.size()); ASSERT_EQUAL(3.1, vector[0]); @@ -91,7 +92,7 @@ TEST("require that vector of bool can be inserted") { root.addBool(true); root.addBool(false); root.addBool(true); - VectorInserter inserter(vector); + VectorInserter inserter(vector); root.traverse(inserter); ASSERT_EQUAL(3u, vector.size()); ASSERT_TRUE(vector[0]); @@ -106,7 +107,22 @@ TEST("require that vector of string can be inserted") { root.addString("foo"); root.addString("bar"); root.addString("baz"); - VectorInserter inserter(vector); + VectorInserter inserter(vector); + root.traverse(inserter); + ASSERT_EQUAL(3u, vector.size()); + ASSERT_EQUAL("foo", vector[0]); + ASSERT_EQUAL("bar", vector[1]); + ASSERT_EQUAL("baz", vector[2]); +} + +TEST("require that vector of string can be inserted") { + StringVector vector; + Slime slime; + Cursor & root = slime.setArray(); + root.addString("foo"); + root.addString("bar"); + root.addString("baz"); + VectorInserter inserter(vector); root.traverse(inserter); ASSERT_EQUAL(3u, vector.size()); ASSERT_EQUAL("foo", vector[0]); diff --git a/config/src/tests/configmanager/configmanager.cpp b/config/src/tests/configmanager/configmanager.cpp index 9bed974f628..a7171b11137 100644 --- a/config/src/tests/configmanager/configmanager.cpp +++ b/config/src/tests/configmanager/configmanager.cpp @@ -17,7 +17,7 @@ namespace { ConfigValue createValue(const std::string & myField, const std::string & md5) { - std::vector< vespalib::string > lines; + StringVector lines; lines.push_back("myField \"" + myField + "\""); return ConfigValue(lines, md5); } diff --git a/config/src/tests/configparser/configparser.cpp b/config/src/tests/configparser/configparser.cpp index 3e569a2d3fb..32043ae79dc 100644 --- a/config/src/tests/configparser/configparser.cpp +++ b/config/src/tests/configparser/configparser.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "config-foo.h" #include #include @@ -23,7 +24,7 @@ namespace { ConfigValue readConfig(const vespalib::string & fileName) { asciistream is(asciistream::createFromFile(fileName)); - return ConfigValue(is.getlines(), ""); + return ConfigValue(getlines(is), ""); } } diff --git a/config/src/vespa/config/common/configparser.cpp b/config/src/vespa/config/common/configparser.cpp index 3e18d6ae4e7..97373071ed5 100644 --- a/config/src/vespa/config/common/configparser.cpp +++ b/config/src/vespa/config/common/configparser.cpp @@ -124,10 +124,9 @@ getValueForKey(vespalib::stringref key, vespalib::stringref line, } StringVector -ConfigParser::getLinesForKey(vespalib::stringref key, - const vsvector & lines) +ConfigParser::getLinesForKey(vespalib::stringref key, Cfg lines) { - vsvector retval; + StringVector retval; for (uint32_t i = 0; i < lines.size(); i++) { vespalib::string value; @@ -140,6 +139,18 @@ ConfigParser::getLinesForKey(vespalib::stringref key, return retval; } +std::set +ConfigParser::getUniqueNonWhiteSpaceLines(Cfg config) { + std::set unique; + for (uint32_t i = 0; i < config.size(); i++) { + vespalib::string line = stripWhitespace(config[i]); + if (!line.empty()) { + unique.insert(line); + } + } + return unique; +} + void ConfigParser::stripLinesForKey(vespalib::stringref key, std::set& config) @@ -155,10 +166,10 @@ ConfigParser::stripLinesForKey(vespalib::stringref key, } } -std::map -ConfigParser::splitMap(const vsvector & config) +std::map +ConfigParser::splitMap(Cfg config) { - std::map items; + std::map items; vespalib::string lastValue; @@ -178,7 +189,7 @@ ConfigParser::splitMap(const vsvector & config) vespalib::string value = config[i].substr(pos + 1); if (key != lastValue) { - items[key] = vsvector(); + items[key] = StringVector(); lastValue = key; } @@ -191,10 +202,10 @@ ConfigParser::splitMap(const vsvector & config) return items; } -std::vector -ConfigParser::splitArray(const vsvector & config) +std::vector +ConfigParser::splitArray(Cfg config) { - std::vector items; + std::vector items; vespalib::string lastValue; @@ -214,7 +225,7 @@ ConfigParser::splitArray(const vsvector & config) vespalib::string value = config[i].substr(pos + 1); if (key != lastValue) { - items.push_back(vsvector()); + items.push_back(StringVector()); lastValue = key; } @@ -266,7 +277,7 @@ ConfigParser::stripWhitespace(vespalib::stringref source) } vespalib::string -ConfigParser::arrayToString(const vsvector & array) +ConfigParser::arrayToString(Cfg array) { vespalib::asciistream ost; if (array.size() == 0) { @@ -281,13 +292,13 @@ ConfigParser::arrayToString(const vsvector & array) template<> bool -ConfigParser::convert(const vsvector & config) +ConfigParser::convert(const StringVector & config) { if (config.size() != 1) { throw InvalidConfigException("Expected single line with bool value, " "got " + arrayToString(config), VESPA_STRLOC); } - std::string value = stripWhitespace(deQuote(config[0])); + vespalib::string value = stripWhitespace(deQuote(config[0])); if (value == "true") { return true; @@ -301,13 +312,13 @@ ConfigParser::convert(const vsvector & config) template<> int32_t -ConfigParser::convert(const vsvector & config) +ConfigParser::convert(const StringVector & config) { if (config.size() != 1) { throw InvalidConfigException("Expected single line with int32_t value, " "got " + arrayToString(config), VESPA_STRLOC); } - std::string value(deQuote(stripWhitespace(config[0]))); + vespalib::string value(deQuote(stripWhitespace(config[0]))); const char *startp = value.c_str(); char *endp; @@ -321,13 +332,13 @@ ConfigParser::convert(const vsvector & config) template<> int64_t -ConfigParser::convert(const vsvector & config) +ConfigParser::convert(const StringVector & config) { if (config.size() != 1) { throw InvalidConfigException("Expected single line with int64_t value, " "got " + arrayToString(config), VESPA_STRLOC); } - std::string value(deQuote(stripWhitespace(config[0]))); + vespalib::string value(deQuote(stripWhitespace(config[0]))); const char *startp = value.c_str(); char *endp; @@ -341,13 +352,13 @@ ConfigParser::convert(const vsvector & config) template<> double -ConfigParser::convert(const vsvector & config) +ConfigParser::convert(const StringVector & config) { if (config.size() != 1) { throw InvalidConfigException("Expected single line with double value, " "got " + arrayToString(config), VESPA_STRLOC); } - std::string value(deQuote(stripWhitespace(config[0]))); + vespalib::string value(deQuote(stripWhitespace(config[0]))); const char *startp = value.c_str(); char *endp; @@ -362,14 +373,14 @@ ConfigParser::convert(const vsvector & config) template<> vespalib::string -ConfigParser::convert(const vsvector & config) +ConfigParser::convert(const StringVector & config) { if (config.size() != 1) { throw InvalidConfigException("Expected single line with string value, " "got " + arrayToString(config), VESPA_STRLOC); } - std::string value = stripWhitespace(config[0]); + vespalib::string value = stripWhitespace(config[0]); return deQuote(value); } diff --git a/config/src/vespa/config/common/configparser.h b/config/src/vespa/config/common/configparser.h index dc89930c23e..42ee684eb59 100644 --- a/config/src/vespa/config/common/configparser.h +++ b/config/src/vespa/config/common/configparser.h @@ -14,69 +14,83 @@ namespace config { */ class ConfigParser { public: - using vsvector = StringVector; + class Cfg { + public: + Cfg(const std::vector & v) + : _cfg(&v[0]), _sz(v.size()) + { } + Cfg(const std::vector> & v) : + _cfg(&v[0]), + _sz(v.size()) + { } + size_t size() const { return _sz; } + const vespalib::string & operator[] (size_t idx) const { return _cfg[idx]; } + private: + const vespalib::string * _cfg; + size_t _sz; + }; private: - static vsvector getLinesForKey(vespalib::stringref key, const vsvector & config); + static StringVector getLinesForKey(vespalib::stringref key, Cfg config); - static std::vector splitArray( const vsvector & config); - static std::map splitMap( const vsvector & config); + static std::vector splitArray(Cfg config); + static std::map splitMap(Cfg config); static vespalib::string deQuote(const vespalib::string & source); static void throwNoDefaultValue(vespalib::stringref key); template - static T convert(const vsvector &); + static T convert(const StringVector & config); - static vespalib::string arrayToString(const vsvector &); + static vespalib::string arrayToString(Cfg config); - template - static T parseInternal(vespalib::stringref key, const V & config); - template - static T parseInternal(vespalib::stringref key, const V & config, T defaultValue); + template + static T parseInternal(vespalib::stringref key, Cfg config); + template + static T parseInternal(vespalib::stringref key, Cfg config, T defaultValue); - template - static std::vector parseArrayInternal(vespalib::stringref key, const V & config); - template - static std::map parseMapInternal(vespalib::stringref key, const V & config); - template - static T parseStructInternal(vespalib::stringref key, const V & config); + template + static V parseArrayInternal(vespalib::stringref key, Cfg config); + template + static std::map parseMapInternal(vespalib::stringref key, Cfg config); + template + static T parseStructInternal(vespalib::stringref key, Cfg config); public: - static void stripLinesForKey(vespalib::stringref key, - std::set& config); + static void stripLinesForKey(vespalib::stringref key, std::set& config); + static std::set getUniqueNonWhiteSpaceLines(Cfg config); static vespalib::string stripWhitespace(vespalib::stringref source); template - static T parse(vespalib::stringref key, const vsvector & config) { - return parseInternal(key, config); + static T parse(vespalib::stringref key, Cfg config) { + return parseInternal(key, config); } template - static T parse(vespalib::stringref key, const vsvector & config, T defaultValue) { + static T parse(vespalib::stringref key, Cfg config, T defaultValue) { return parseInternal(key, config, defaultValue); } - template - static std::vector parseArray(vespalib::stringref key, const vsvector & config) { - return parseArrayInternal(key, config); + template + static V parseArray(vespalib::stringref key, Cfg config) { + return parseArrayInternal(key, config); } template - static std::map parseMap(vespalib::stringref key, const vsvector & config) { - return parseMapInternal(key, config); + static std::map parseMap(vespalib::stringref key, Cfg config) { + return parseMapInternal(key, config); } template - static T parseStruct(vespalib::stringref key, const vsvector & config) { - return parseStructInternal(key, config); + static T parseStruct(vespalib::stringref key, Cfg config) { + return parseStructInternal(key, config); } }; -template +template T -ConfigParser::parseInternal(vespalib::stringref key, const V & config) +ConfigParser::parseInternal(vespalib::stringref key, Cfg config) { - V lines = getLinesForKey(key, config); + StringVector lines = getLinesForKey(key, config); if (lines.size() == 0) { throwNoDefaultValue(key); @@ -84,11 +98,11 @@ ConfigParser::parseInternal(vespalib::stringref key, const V & config) return convert(lines); } -template +template T -ConfigParser::parseInternal(vespalib::stringref key, const V & config, T defaultValue) +ConfigParser::parseInternal(vespalib::stringref key, Cfg config, T defaultValue) { - V lines = getLinesForKey(key, config); + StringVector lines = getLinesForKey(key, config); if (lines.size() == 0) { return defaultValue; @@ -99,67 +113,68 @@ ConfigParser::parseInternal(vespalib::stringref key, const V & config, T default template T -ConfigParser::convert(const vsvector & lines) { +ConfigParser::convert(const StringVector & lines) { return T(lines); } -template +template std::map -ConfigParser::parseMapInternal(vespalib::stringref key, const V & config) +ConfigParser::parseMapInternal(vespalib::stringref key, Cfg config) { - V lines = getLinesForKey(key, config); - typedef std::map SplittedMap; + StringVector lines = getLinesForKey(key, config); + using SplittedMap = std::map; SplittedMap s = splitMap(lines); std::map retval; - for (typename SplittedMap::iterator it(s.begin()), mt(s.end()); it != mt; it++) { - retval[it->first] = convert(it->second); + for (const auto & e : s) { + retval[e.first] = convert(e.second); } return retval; } -template -std::vector -ConfigParser::parseArrayInternal(vespalib::stringref key, const V & config) +template +V +ConfigParser::parseArrayInternal(vespalib::stringref key, Cfg config) { - V lines = getLinesForKey(key, config); - std::vector split = splitArray(lines); + StringVector lines = getLinesForKey(key, config); + std::vector split = splitArray(lines); - std::vector retval; + V retval; + retval.reserve(split.size()); for (uint32_t i = 0; i < split.size(); i++) { - retval.push_back(convert(split[i])); + retval.push_back(convert(split[i])); } return retval; } -template +template T -ConfigParser::parseStructInternal(vespalib::stringref key, const V & config) +ConfigParser::parseStructInternal(vespalib::stringref key, Cfg config) { - V lines = getLinesForKey(key, config); + StringVector lines = getLinesForKey(key, config); return convert(lines); } template<> bool -ConfigParser::convert(const vsvector & config); +ConfigParser::convert(const StringVector & config); template<> int32_t -ConfigParser::convert(const vsvector & config); +ConfigParser::convert(const StringVector & config); template<> int64_t -ConfigParser::convert(const vsvector & config); +ConfigParser::convert(const StringVector & config); template<> double -ConfigParser::convert(const vsvector & config); +ConfigParser::convert(const StringVector & config); template<> vespalib::string -ConfigParser::convert(const vsvector & config); +ConfigParser::convert(const StringVector & config); } // config diff --git a/config/src/vespa/config/common/configstate.h b/config/src/vespa/config/common/configstate.h index a0229f85cd5..0895517343c 100644 --- a/config/src/vespa/config/common/configstate.h +++ b/config/src/vespa/config/common/configstate.h @@ -1,7 +1,6 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once -#include #include "misc.h" namespace config { diff --git a/config/src/vespa/config/common/misc.cpp b/config/src/vespa/config/common/misc.cpp index 7eba045a2c7..31c66cd4eb8 100644 --- a/config/src/vespa/config/common/misc.cpp +++ b/config/src/vespa/config/common/misc.cpp @@ -39,6 +39,16 @@ calculateContentXxhash64(const StringVector & fileContents) return ss.str(); } +StringVector +getlines(vespalib::asciistream & is, char delim) +{ + StringVector lines; + while (!is.eof()) { + lines.push_back(is.getline(delim)); + } + return lines; +} + bool isGenerationNewer(int64_t newGen, int64_t oldGen) { diff --git a/config/src/vespa/config/common/misc.h b/config/src/vespa/config/common/misc.h index f26ee3df850..584a7ca527b 100644 --- a/config/src/vespa/config/common/misc.h +++ b/config/src/vespa/config/common/misc.h @@ -5,6 +5,7 @@ #include namespace vespalib { + class asciistream; class Slime; namespace slime { struct Inspector; @@ -32,4 +33,6 @@ typedef std::shared_ptr SlimePtr; */ void copySlimeObject(const vespalib::slime::Inspector & src, vespalib::slime::Cursor & dest); +StringVector getlines(vespalib::asciistream & is, char delim='\n'); + } diff --git a/config/src/vespa/config/common/types.h b/config/src/vespa/config/common/types.h index b59685ffaa0..0c9ad15d046 100644 --- a/config/src/vespa/config/common/types.h +++ b/config/src/vespa/config/common/types.h @@ -2,12 +2,14 @@ #pragma once #include +#include #include #include namespace config { -using StringVector = std::vector; +//using StringVector = std::vector; +using StringVector = std::vector>; using BoolVector = std::vector; using DoubleVector = std::vector; using LongVector = std::vector; diff --git a/config/src/vespa/config/configgen/map_inserter.h b/config/src/vespa/config/configgen/map_inserter.h index 9f596912c5f..e35ee8cb0ac 100644 --- a/config/src/vespa/config/configgen/map_inserter.h +++ b/config/src/vespa/config/configgen/map_inserter.h @@ -4,12 +4,9 @@ #include "value_converter.h" #include #include - #include -namespace config { - -namespace internal { +namespace config::internal { template > class MapInserter : public ::vespalib::slime::ObjectTraverser { @@ -20,9 +17,4 @@ private: std::map & _map; }; -} // namespace internal - -} // namespace config - -#include "map_inserter.hpp" - +} diff --git a/config/src/vespa/config/configgen/map_inserter.hpp b/config/src/vespa/config/configgen/map_inserter.hpp index 6ffdb0e893b..9bd04c95b11 100644 --- a/config/src/vespa/config/configgen/map_inserter.hpp +++ b/config/src/vespa/config/configgen/map_inserter.hpp @@ -1,7 +1,10 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -namespace config { -namespace internal { +#pragma once + +#include "map_inserter.h" + +namespace config::internal { template MapInserter::MapInserter(std::map & map) @@ -16,6 +19,4 @@ MapInserter::field(const ::vespalib::Memory & symbol, const ::vesp _map[symbol.make_string()] = converter(inspector); } -} // namespace internal - } diff --git a/config/src/vespa/config/configgen/value_converter.cpp b/config/src/vespa/config/configgen/value_converter.cpp index 4b25c6040da..36843456b25 100644 --- a/config/src/vespa/config/configgen/value_converter.cpp +++ b/config/src/vespa/config/configgen/value_converter.cpp @@ -54,7 +54,7 @@ template<> vespalib::string convertValue(const ::vespalib::slime::Inspector & __inspector) { return __inspector.asString().make_string(); } void -requireValid(const vespalib::string & __fieldName, const ::vespalib::slime::Inspector & __inspector) { +requireValid(vespalib::stringref __fieldName, const ::vespalib::slime::Inspector & __inspector) { if (!__inspector.valid()) { throw ::config::InvalidConfigException("Value for '" + __fieldName + "' required but not found"); } diff --git a/config/src/vespa/config/configgen/value_converter.h b/config/src/vespa/config/configgen/value_converter.h index 695e798b015..c583f1595dc 100644 --- a/config/src/vespa/config/configgen/value_converter.h +++ b/config/src/vespa/config/configgen/value_converter.h @@ -7,7 +7,7 @@ namespace config::internal { -void requireValid(const vespalib::string & __fieldName, const ::vespalib::slime::Inspector & __inspector); +void requireValid(vespalib::stringref __fieldName, const ::vespalib::slime::Inspector & __inspector); template T convertValue(const ::vespalib::slime::Inspector & __inspector) { return T(::config::ConfigPayload(__inspector)); } @@ -29,7 +29,7 @@ vespalib::string convertValue(const ::vespalib::slime::Inspector & __inspector); template struct ValueConverter { - T operator()(const vespalib::string & __fieldName, const ::vespalib::slime::Inspector & __inspector) { + T operator()(vespalib::stringref __fieldName, const ::vespalib::slime::Inspector & __inspector) { requireValid(__fieldName, __inspector); return convertValue(__inspector); } diff --git a/config/src/vespa/config/configgen/vector_inserter.h b/config/src/vespa/config/configgen/vector_inserter.h index 3c5a406ef67..4b8c7a5e0a1 100644 --- a/config/src/vespa/config/configgen/vector_inserter.h +++ b/config/src/vespa/config/configgen/vector_inserter.h @@ -5,22 +5,15 @@ #include #include -namespace config { +namespace config::internal { -namespace internal { - -template > +template > class VectorInserter : public ::vespalib::slime::ArrayTraverser { public: - VectorInserter(std::vector & vector); + VectorInserter(V & vector); void entry(size_t idx, const ::vespalib::slime::Inspector & inspector) override; private: - std::vector & _vector; + V & _vector; }; -} // namespace internal - -} // namespace config - -#include "vector_inserter.hpp" - +} diff --git a/config/src/vespa/config/configgen/vector_inserter.hpp b/config/src/vespa/config/configgen/vector_inserter.hpp index ed43dda07d6..31c3c52a358 100644 --- a/config/src/vespa/config/configgen/vector_inserter.hpp +++ b/config/src/vespa/config/configgen/vector_inserter.hpp @@ -1,22 +1,23 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -namespace config { -namespace internal { +#pragma once -template -VectorInserter::VectorInserter(std::vector & vector) +#include "vector_inserter.h" + +namespace config::internal { + +template +VectorInserter::VectorInserter(V & vector) : _vector(vector) {} -template +template void -VectorInserter::entry(size_t idx, const ::vespalib::slime::Inspector & inspector) +VectorInserter::entry(size_t idx, const ::vespalib::slime::Inspector & inspector) { (void) idx; Converter converter; _vector.push_back(converter(inspector)); } -} // namespace internal - } diff --git a/config/src/vespa/config/file/filesource.cpp b/config/src/vespa/config/file/filesource.cpp index 1585bd1bd53..011868f7c06 100644 --- a/config/src/vespa/config/file/filesource.cpp +++ b/config/src/vespa/config/file/filesource.cpp @@ -53,7 +53,7 @@ StringVector FileSource::readConfigFile(const vespalib::string & fileName) { asciistream is(asciistream::createFromFile(fileName)); - return is.getlines(); + return getlines(is); } void diff --git a/config/src/vespa/config/raw/rawsource.cpp b/config/src/vespa/config/raw/rawsource.cpp index f37f30bb2f7..cf551106405 100644 --- a/config/src/vespa/config/raw/rawsource.cpp +++ b/config/src/vespa/config/raw/rawsource.cpp @@ -36,7 +36,7 @@ StringVector RawSource::readConfig() { vespalib::asciistream is(_payload); - return is.getlines(); + return getlines(is); } } diff --git a/config/src/vespa/config/set/configinstancesourcefactory.cpp b/config/src/vespa/config/set/configinstancesourcefactory.cpp index 64abaada0a4..15a6125d096 100644 --- a/config/src/vespa/config/set/configinstancesourcefactory.cpp +++ b/config/src/vespa/config/set/configinstancesourcefactory.cpp @@ -14,7 +14,7 @@ public: { } void close() override { } void getConfig() override { - _holder->handle(std::make_unique(config::ConfigValue(_buffer.getlines()), true, _generation)); + _holder->handle(std::make_unique(config::ConfigValue(config::getlines(_buffer)), true, _generation)); } void reload(int64_t generation) override { _generation = generation; } diff --git a/config/src/vespa/config/set/configsetsource.cpp b/config/src/vespa/config/set/configsetsource.cpp index 94547fbe63d..41886a12d01 100644 --- a/config/src/vespa/config/set/configsetsource.cpp +++ b/config/src/vespa/config/set/configsetsource.cpp @@ -30,7 +30,7 @@ ConfigSetSource::getConfig() vespalib::asciistream ss; AsciiConfigWriter writer(ss); writer.write(*instance); - StringVector lines(ss.getlines()); + StringVector lines(getlines(ss)); vespalib::string currentXxhash64(calculateContentXxhash64(lines)); if (isGenerationNewer(_generation, _lastState.generation) && currentXxhash64.compare(_lastState.xxhash64) != 0) { -- cgit v1.2.3