diff options
author | vng <viktor.govako@gmail.com> | 2012-05-22 20:44:37 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:39:05 +0300 |
commit | 71dfe1b9e3ac1a161c2bc830ec5847f407eaa863 (patch) | |
tree | e2004747331f26f9c2d3efc6ae5d492363410c6b /indexer/feature_loader_base.cpp | |
parent | cc5e4ad665e51f77e5fd8655ce6e70767a6093e9 (diff) |
Create feature::LoaderBase once and use it for all loading features - no "new-delete-shared_ptr" overhead for this.
Diffstat (limited to 'indexer/feature_loader_base.cpp')
-rw-r--r-- | indexer/feature_loader_base.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/indexer/feature_loader_base.cpp b/indexer/feature_loader_base.cpp index d9b3804626..bc69121361 100644 --- a/indexer/feature_loader_base.cpp +++ b/indexer/feature_loader_base.cpp @@ -21,6 +21,12 @@ namespace feature SharedLoadInfo::SharedLoadInfo(FilesContainerR const & cont, DataHeader const & header) : m_cont(cont), m_header(header) { + CreateLoader(); +} + +SharedLoadInfo::~SharedLoadInfo() +{ + delete m_pLoader; } SharedLoadInfo::ReaderT SharedLoadInfo::GetDataReader() const @@ -38,22 +44,18 @@ SharedLoadInfo::ReaderT SharedLoadInfo::GetTrianglesReader(int ind) const return m_cont.GetReader(GetTagForIndex(TRIANGLE_FILE_TAG, ind)); } -LoaderBase * SharedLoadInfo::CreateLoader() const +void SharedLoadInfo::CreateLoader() { - LoaderBase * p; - switch (m_header.GetVersion()) { case DataHeader::v1: - p = new old_101::feature::LoaderImpl(*this); + m_pLoader = new old_101::feature::LoaderImpl(*this); break; default: - p = new LoaderCurrent(*this); + m_pLoader = new LoaderCurrent(*this); break; } - - return p; } @@ -66,11 +68,16 @@ LoaderBase::LoaderBase(SharedLoadInfo const & info) { } -void LoaderBase::Deserialize(BufferT data) +void LoaderBase::Init(BufferT data) { m_Data = data; + m_pF = 0; + m_CommonOffset = m_Header2Offset = 0; m_ptsSimpMask = 0; + + m_ptsOffsets.clear(); + m_trgOffsets.clear(); } uint32_t LoaderBase::CalcOffset(ArrayByteSource const & source) const |