diff options
19 files changed, 66 insertions, 36 deletions
diff --git a/document/src/tests/structfieldvaluetest.cpp b/document/src/tests/structfieldvaluetest.cpp index d6e585e0987..9940f2de5b3 100644 --- a/document/src/tests/structfieldvaluetest.cpp +++ b/document/src/tests/structfieldvaluetest.cpp @@ -1,6 +1,7 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/document/fieldvalue/fieldvalues.h> +#include <vespa/document/datatype/documenttype.h> #include <vespa/document/repo/configbuilder.h> #include <vespa/document/serialization/vespadocumentdeserializer.h> #include <vespa/vdstestlib/cppunit/macros.h> diff --git a/document/src/vespa/document/fieldset/fieldsets.cpp b/document/src/vespa/document/fieldset/fieldsets.cpp index 4ac09820979..51166adec86 100644 --- a/document/src/vespa/document/fieldset/fieldsets.cpp +++ b/document/src/vespa/document/fieldset/fieldsets.cpp @@ -2,6 +2,7 @@ #include "fieldsets.h" #include <vespa/document/fieldvalue/document.h> +#include <vespa/document/datatype/documenttype.h> namespace document { diff --git a/document/src/vespa/document/fieldvalue/document.cpp b/document/src/vespa/document/fieldvalue/document.cpp index f8358cfb544..8e8f6ab52d8 100644 --- a/document/src/vespa/document/fieldvalue/document.cpp +++ b/document/src/vespa/document/fieldvalue/document.cpp @@ -1,6 +1,7 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "document.h" +#include <vespa/document/datatype/documenttype.h> #include <vespa/vespalib/util/crc.h> #include <vespa/document/repo/fixedtyperepo.h> #include <vespa/document/serialization/vespadocumentdeserializer.h> @@ -8,6 +9,7 @@ #include <vespa/vespalib/objects/nbostream.h> #include <vespa/document/util/serializableexceptions.h> #include <vespa/document/base/exceptions.h> + #include <sstream> using vespalib::nbostream; @@ -153,6 +155,11 @@ Document::swap(Document & rhs) std::swap(_lastModified, rhs._lastModified); } +const DocumentType& +Document::getType() const { + return static_cast<const DocumentType &>(StructuredFieldValue::getType()); +} + Document& Document::operator=(const Document& doc) { StructuredFieldValue::operator=(doc); diff --git a/document/src/vespa/document/fieldvalue/document.h b/document/src/vespa/document/fieldvalue/document.h index f159e9be1d5..02b97238cb2 100644 --- a/document/src/vespa/document/fieldvalue/document.h +++ b/document/src/vespa/document/fieldvalue/document.h @@ -18,7 +18,6 @@ #include "structfieldvalue.h" #include <vespa/document/base/documentid.h> #include <vespa/document/base/field.h> -#include <vespa/document/datatype/documenttype.h> namespace document { @@ -71,10 +70,7 @@ public: void accept(FieldValueVisitor &visitor) override { visitor.visit(*this); } void accept(ConstFieldValueVisitor &visitor) const override { visitor.visit(*this); } - const DocumentType& getType() const { - return static_cast<const DocumentType &>(StructuredFieldValue::getType()); - } - + const DocumentType& getType() const; const DocumentId& getId() const { return _id; } DocumentId & getId() { return _id; } diff --git a/document/src/vespa/document/repo/documenttyperepo.cpp b/document/src/vespa/document/repo/documenttyperepo.cpp index 78d668a4886..b555e25c4cc 100644 --- a/document/src/vespa/document/repo/documenttyperepo.cpp +++ b/document/src/vespa/document/repo/documenttyperepo.cpp @@ -3,7 +3,6 @@ #include "documenttyperepo.h" #include <vespa/document/datatype/annotationreferencedatatype.h> -#include <vespa/document/datatype/annotationtype.h> #include <vespa/document/datatype/arraydatatype.h> #include <vespa/document/datatype/documenttype.h> #include <vespa/document/datatype/mapdatatype.h> @@ -11,11 +10,8 @@ #include <vespa/document/datatype/urldatatype.h> #include <vespa/document/datatype/weightedsetdatatype.h> #include <vespa/document/datatype/referencedatatype.h> -#include <vespa/vespalib/objects/identifiable.h> #include <vespa/vespalib/stllike/hash_map.hpp> -#include <vespa/vespalib/util/closure.h> #include <vespa/vespalib/util/exceptions.h> -#include <vespa/vespalib/util/stringfmt.h> #include <vespa/document/config/config-documenttypes.h> #include <fstream> #include <memory> @@ -39,6 +35,20 @@ using vespalib::stringref; namespace document { +namespace internal { + +using DocumentTypeMapT = vespalib::hash_map<int32_t, DataTypeRepo *>; + +class DocumentTypeMap : public DocumentTypeMapT +{ +public: + using DocumentTypeMapT::DocumentTypeMapT; +}; + +} + +using DocumentTypeMap = internal::DocumentTypeMap; + namespace { template <typename Container> void DeleteContent(Container &c) { @@ -359,7 +369,6 @@ void addDataTypes(const vector<Datatype> &types, Repo &repo, } } -typedef hash_map<int32_t, DataTypeRepo *> DocumentTypeMap; void addDocumentTypes(const DocumentTypeMap &type_map, Repo &repo) { for (DocumentTypeMap::const_iterator it = type_map.begin(); it != type_map.end(); ++it) { @@ -515,49 +524,55 @@ void configureAllRepos(const DocumenttypesConfig::DocumenttypeVector &t, } // namespace -DocumentTypeRepo::DocumentTypeRepo() { - addDefaultDocument(_doc_types); +DocumentTypeRepo::DocumentTypeRepo() : + _doc_types(std::make_unique<internal::DocumentTypeMap>()) +{ + addDefaultDocument(*_doc_types); } -DocumentTypeRepo::DocumentTypeRepo(const DocumentType & type) { - addDefaultDocument(_doc_types); +DocumentTypeRepo::DocumentTypeRepo(const DocumentType & type) : + _doc_types(std::make_unique<internal::DocumentTypeMap>()) +{ + addDefaultDocument(*_doc_types); try { - addDataTypeRepo(makeDataTypeRepo(type, _doc_types), _doc_types); + addDataTypeRepo(makeDataTypeRepo(type, *_doc_types), *_doc_types); } catch (...) { - DeleteMapContent(_doc_types); + DeleteMapContent(*_doc_types); throw; } } -DocumentTypeRepo::DocumentTypeRepo(const DocumenttypesConfig &config) { - addDefaultDocument(_doc_types); +DocumentTypeRepo::DocumentTypeRepo(const DocumenttypesConfig &config) : + _doc_types(std::make_unique<internal::DocumentTypeMap>()) +{ + addDefaultDocument(*_doc_types); try { - createAllDocumentTypes(config.documenttype, _doc_types); - addAllDocumentTypesToRepos(_doc_types); - configureAllRepos(config.documenttype, _doc_types); + createAllDocumentTypes(config.documenttype, *_doc_types); + addAllDocumentTypesToRepos(*_doc_types); + configureAllRepos(config.documenttype, *_doc_types); } catch (...) { - DeleteMapContent(_doc_types); + DeleteMapContent(*_doc_types); throw; } } DocumentTypeRepo::~DocumentTypeRepo() { - DeleteMapContent(_doc_types); + DeleteMapContent(*_doc_types); } const DocumentType *DocumentTypeRepo::getDocumentType(int32_t type_id) const { - const DataTypeRepo *repo = FindPtr(_doc_types, type_id); + const DataTypeRepo *repo = FindPtr(*_doc_types, type_id); return repo ? repo->doc_type : nullptr; } const DocumentType *DocumentTypeRepo::getDocumentType(const stringref &name) const { DocumentTypeMap::const_iterator it = - _doc_types.find(DocumentType::createId(name)); + _doc_types->find(DocumentType::createId(name)); - if (it != _doc_types.end() && it->second->doc_type->getName() == name) { + if (it != _doc_types->end() && it->second->doc_type->getName() == name) { return it->second->doc_type; } - for (it = _doc_types.begin(); it != _doc_types.end(); ++it) { + for (it = _doc_types->begin(); it != _doc_types->end(); ++it) { if (it->second->doc_type->getName() == name) { return it->second->doc_type; } @@ -567,27 +582,27 @@ const DocumentType *DocumentTypeRepo::getDocumentType(const stringref &name) con const DataType * DocumentTypeRepo::getDataType(const DocumentType &doc_type, int32_t id) const { - const DataTypeRepo *dt_repo = FindPtr(_doc_types, doc_type.getId()); + const DataTypeRepo *dt_repo = FindPtr(*_doc_types, doc_type.getId()); return dt_repo ? dt_repo->repo.lookup(id) : nullptr; } const DataType * DocumentTypeRepo::getDataType( const DocumentType &doc_type, const stringref &name) const { - const DataTypeRepo *dt_repo = FindPtr(_doc_types, doc_type.getId()); + const DataTypeRepo *dt_repo = FindPtr(*_doc_types, doc_type.getId()); return dt_repo ? dt_repo->repo.lookup(name) : nullptr; } const AnnotationType *DocumentTypeRepo::getAnnotationType( const DocumentType &doc_type, int32_t id) const { - const DataTypeRepo *dt_repo = FindPtr(_doc_types, doc_type.getId()); + const DataTypeRepo *dt_repo = FindPtr(*_doc_types, doc_type.getId()); return dt_repo ? dt_repo->annotations.lookup(id) : nullptr; } void DocumentTypeRepo::forEachDocumentType( Closure1<const DocumentType &> &c) const { for (DocumentTypeMap::const_iterator - it = _doc_types.begin(); it != _doc_types.end(); ++it) { + it = _doc_types->begin(); it != _doc_types->end(); ++it) { c.call(*it->second->doc_type); } } diff --git a/document/src/vespa/document/repo/documenttyperepo.h b/document/src/vespa/document/repo/documenttyperepo.h index 55655fe169e..4955f3562db 100644 --- a/document/src/vespa/document/repo/documenttyperepo.h +++ b/document/src/vespa/document/repo/documenttyperepo.h @@ -3,7 +3,6 @@ #pragma once #include <memory> -#include <vespa/vespalib/stllike/hash_map.h> #include <vespa/vespalib/stllike/string.h> #include <vespa/vespalib/util/closure.h> @@ -11,6 +10,7 @@ namespace document { namespace internal { class InternalDocumenttypesType; + class DocumentTypeMap; } class AnnotationType; @@ -19,9 +19,7 @@ class DataTypeRepo; class DocumentType; class DocumentTypeRepo { - typedef vespalib::hash_map<int32_t, DataTypeRepo *> DocumentTypeMap; - - DocumentTypeMap _doc_types; + std::unique_ptr<internal::DocumentTypeMap> _doc_types; public: using DocumenttypesConfig = const internal::InternalDocumenttypesType; diff --git a/document/src/vespa/document/update/fieldupdate.cpp b/document/src/vespa/document/update/fieldupdate.cpp index 3141fdf3a4f..e25b95e56c1 100644 --- a/document/src/vespa/document/update/fieldupdate.cpp +++ b/document/src/vespa/document/update/fieldupdate.cpp @@ -3,6 +3,7 @@ #include "fieldupdate.h" #include <vespa/document/base/exceptions.h> #include <vespa/document/fieldvalue/document.h> +#include <vespa/document/datatype/documenttype.h> namespace document { diff --git a/memfilepersistence/src/vespa/memfilepersistence/mapper/simplememfileiobuffer.cpp b/memfilepersistence/src/vespa/memfilepersistence/mapper/simplememfileiobuffer.cpp index 1f5344d466e..ccf63ed3504 100644 --- a/memfilepersistence/src/vespa/memfilepersistence/mapper/simplememfileiobuffer.cpp +++ b/memfilepersistence/src/vespa/memfilepersistence/mapper/simplememfileiobuffer.cpp @@ -2,6 +2,7 @@ #include "simplememfileiobuffer.h" #include <vespa/document/repo/documenttyperepo.h> +#include <vespa/document/datatype/documenttype.h> #include <vespa/memfilepersistence/common/environment.h> #include <vespa/vespalib/util/exceptions.h> #include <vespa/log/log.h> diff --git a/searchcore/src/tests/proton/common/cachedselect_test.cpp b/searchcore/src/tests/proton/common/cachedselect_test.cpp index fb5e40767ab..1117234f18f 100644 --- a/searchcore/src/tests/proton/common/cachedselect_test.cpp +++ b/searchcore/src/tests/proton/common/cachedselect_test.cpp @@ -23,6 +23,7 @@ #include <vespa/document/fieldvalue/stringfieldvalue.h> #include <vespa/document/fieldvalue/intfieldvalue.h> #include <vespa/document/fieldvalue/document.h> +#include <vespa/document/datatype/documenttype.h> #include <vespa/log/log.h> LOG_SETUP("cachedselect_test"); diff --git a/searchcore/src/tests/proton/server/documentretriever_test.cpp b/searchcore/src/tests/proton/server/documentretriever_test.cpp index bd2fe12e894..093853addcc 100644 --- a/searchcore/src/tests/proton/server/documentretriever_test.cpp +++ b/searchcore/src/tests/proton/server/documentretriever_test.cpp @@ -5,6 +5,7 @@ #include <vespa/document/bucket/bucketid.h> #include <vespa/document/datatype/datatype.h> #include <vespa/document/datatype/positiondatatype.h> +#include <vespa/document/datatype/documenttype.h> #include <vespa/document/fieldvalue/arrayfieldvalue.h> #include <vespa/document/fieldvalue/document.h> #include <vespa/document/fieldvalue/doublefieldvalue.h> diff --git a/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp b/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp index a3566de66b9..e40d6480cc3 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp @@ -2,6 +2,7 @@ #include "documentretriever.h" #include <vespa/document/datatype/positiondatatype.h> +#include <vespa/document/datatype/documenttype.h> #include <vespa/document/repo/documenttyperepo.h> #include <vespa/searchcore/proton/attribute/document_field_retriever.h> #include <vespa/vespalib/geo/zcurve.h> diff --git a/searchcore/src/vespa/searchcore/proton/server/documentretrieverbase.cpp b/searchcore/src/vespa/searchcore/proton/server/documentretrieverbase.cpp index 07a04905beb..63cfded1962 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentretrieverbase.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentretrieverbase.cpp @@ -2,6 +2,7 @@ #include "documentretrieverbase.h" #include <vespa/document/repo/documenttyperepo.h> +#include <vespa/document/datatype/documenttype.h> #include <vespa/vespalib/stllike/lrucache_map.hpp> using document::DocumentId; diff --git a/searchlib/src/tests/docstore/document_store_visitor/document_store_visitor_test.cpp b/searchlib/src/tests/docstore/document_store_visitor/document_store_visitor_test.cpp index 6c628b761b4..df1fffa2a0e 100644 --- a/searchlib/src/tests/docstore/document_store_visitor/document_store_visitor_test.cpp +++ b/searchlib/src/tests/docstore/document_store_visitor/document_store_visitor_test.cpp @@ -7,6 +7,7 @@ #include <vespa/searchlib/index/dummyfileheadercontext.h> #include <vespa/searchlib/common/bitvector.h> #include <vespa/document/repo/documenttyperepo.h> +#include <vespa/document/datatype/documenttype.h> #include <vespa/document/repo/configbuilder.h> #include <vespa/vespalib/io/fileutil.h> #include <vespa/vespalib/stllike/asciistream.h> diff --git a/searchlib/src/tests/docstore/logdatastore/logdatastore_test.cpp b/searchlib/src/tests/docstore/logdatastore/logdatastore_test.cpp index fc69cf12d74..46e7333ebb7 100644 --- a/searchlib/src/tests/docstore/logdatastore/logdatastore_test.cpp +++ b/searchlib/src/tests/docstore/logdatastore/logdatastore_test.cpp @@ -3,6 +3,7 @@ #include <vespa/vespalib/testkit/test_kit.h> #include <vespa/document/repo/configbuilder.h> #include <vespa/document/repo/documenttyperepo.h> +#include <vespa/document/datatype/documenttype.h> #include <vespa/searchlib/docstore/chunkformats.h> #include <vespa/searchlib/docstore/logdocumentstore.h> #include <vespa/searchlib/docstore/storebybucket.h> diff --git a/searchlib/src/vespa/searchlib/expression/documentfieldnode.cpp b/searchlib/src/vespa/searchlib/expression/documentfieldnode.cpp index 3a5375b672b..d9e4f6a3253 100644 --- a/searchlib/src/vespa/searchlib/expression/documentfieldnode.cpp +++ b/searchlib/src/vespa/searchlib/expression/documentfieldnode.cpp @@ -3,6 +3,7 @@ #include "getdocidnamespacespecificfunctionnode.h" #include "getymumchecksumfunctionnode.h" #include <vespa/document/fieldvalue/fieldvalues.h> +#include <vespa/document/datatype/documenttype.h> #include <vespa/vespalib/encoding/base64.h> #include <vespa/log/log.h> diff --git a/streamingvisitors/src/tests/hitcollector/hitcollector.cpp b/streamingvisitors/src/tests/hitcollector/hitcollector.cpp index dc10ea168c0..4e1ac516a7b 100644 --- a/streamingvisitors/src/tests/hitcollector/hitcollector.cpp +++ b/streamingvisitors/src/tests/hitcollector/hitcollector.cpp @@ -2,6 +2,7 @@ #include <vespa/vespalib/testkit/testapp.h> #include <vespa/document/fieldvalue/fieldvalues.h> +#include <vespa/document/datatype/documenttype.h> #include <vespa/searchlib/fef/matchdata.h> #include <vespa/searchlib/fef/feature_resolver.h> #include <vespa/searchvisitor/hitcollector.h> diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp index 616da034c54..56c95e7fbc7 100644 --- a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp +++ b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp @@ -4,6 +4,7 @@ #include "searchenvironment.h" #include "searchvisitor.h" #include <vespa/document/datatype/positiondatatype.h> +#include <vespa/document/datatype/documenttype.h> #include <vespa/searchlib/aggregation/modifiers.h> #include <vespa/searchlib/common/packets.h> #include <vespa/searchlib/uca/ucaconverter.h> diff --git a/vsm/src/tests/document/document.cpp b/vsm/src/tests/document/document.cpp index 35ca55826ba..629e2954953 100644 --- a/vsm/src/tests/document/document.cpp +++ b/vsm/src/tests/document/document.cpp @@ -2,10 +2,10 @@ #include <vespa/vespalib/testkit/testapp.h> #include <vespa/document/fieldvalue/fieldvalues.h> +#include <vespa/document/datatype/documenttype.h> #include <vespa/vsm/common/storagedocument.h> #include <vespa/vespalib/stllike/asciistream.h> - using namespace document; namespace vsm { diff --git a/vsm/src/vespa/vsm/common/documenttypemapping.cpp b/vsm/src/vespa/vsm/common/documenttypemapping.cpp index 96a7effae57..9a8bbb28f65 100644 --- a/vsm/src/vespa/vsm/common/documenttypemapping.cpp +++ b/vsm/src/vespa/vsm/common/documenttypemapping.cpp @@ -2,6 +2,7 @@ #include "documenttypemapping.h" #include <vespa/document/repo/documenttyperepo.h> +#include <vespa/document/datatype/documenttype.h> #include <vespa/vespalib/stllike/hash_map.hpp> #include <vespa/log/log.h> |