diff options
author | Jedidiah Barber <contact@jedbarber.id.au> | 2021-07-14 11:27:03 +1200 |
---|---|---|
committer | Jedidiah Barber <contact@jedbarber.id.au> | 2021-07-14 11:27:03 +1200 |
commit | 3cb7fdea950dd2d0377f0d9ad8a88fcb7c48b842 (patch) | |
tree | cedbfc08a6bf0bd8cb6ec6c8d8dd94a4e715439b /Platform/SerializerFactory.cpp |
Diffstat (limited to 'Platform/SerializerFactory.cpp')
-rw-r--r-- | Platform/SerializerFactory.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/Platform/SerializerFactory.cpp b/Platform/SerializerFactory.cpp new file mode 100644 index 0000000..794bb4b --- /dev/null +++ b/Platform/SerializerFactory.cpp @@ -0,0 +1,54 @@ +/* + Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved. + + Governed by the TrueCrypt License 3.0 the full text of which is contained in + the file License.txt included in TrueCrypt binary and source code distribution + packages. +*/ + +#include <stdexcept> +#include "SerializerFactory.h" + +namespace TrueCrypt +{ + void SerializerFactory::Deinitialize () + { + if (--UseCount == 0) + { + delete NameToTypeMap; + delete TypeToNameMap; + } + } + + string SerializerFactory::GetName (const type_info &typeInfo) + { + string typeName = StringConverter::GetTypeName (typeInfo); + if (TypeToNameMap->find (typeName) == TypeToNameMap->end()) + throw std::runtime_error (SRC_POS); + + return (*TypeToNameMap)[typeName]; + } + + Serializable *SerializerFactory::GetNewSerializable (const string &typeName) + { + if (NameToTypeMap->find (typeName) == NameToTypeMap->end()) + throw std::runtime_error (SRC_POS); + + return (*NameToTypeMap)[typeName].GetNewPtr(); + } + + void SerializerFactory::Initialize () + { + if (UseCount == 0) + { + NameToTypeMap = new map <string, SerializerFactory::MapEntry>; + TypeToNameMap = new map <string, string>; + } + + ++UseCount; + } + + map <string, SerializerFactory::MapEntry> *SerializerFactory::NameToTypeMap; + map <string, string> *SerializerFactory::TypeToNameMap; + int SerializerFactory::UseCount; +} |