rendered paste bodyArchiveFactory.h========================================#ifndef krux_krx_ArchiveFactory_h#define krux_krx_ArchiveFactory_h#include "krx/IArchive.h"#include "krx/IEntry.h"#include "krx/ICodec.h"#include <map>#include <fstream>typedef std::map<const char*,ICodec*> CodecMap;typedef std::pair<const char*,ICodec*> CodecMapPair;typedef std::map<const char*,ICodec*>::iterator CodecMapIterator;namespace krux { namespace krx { class ArchiveFactory { public: static IArchive* openArchive(const char* archive); static IArchive* createArchive(const char* archive); static void closeArchive(IArchive* archive); static void registerCodec(ICodec* codec); static ICodec* getCodec(const char* codecName); private: static void initialize(); static CodecMap m_Codecs; static bool m_Initialized; }; }}#endifArchiveFactory.cpp========================================#include "krx/ArchiveFactory.h"#include <fstream>#include "Archive.h"#include "NullCodec.h"using namespace krux::krx;std::map<const char*,ICodec*> ArchiveFactory::m_Codecs;bool ArchiveFactory::m_Initialized = false;void ArchiveFactory::initialize() { if (!ArchiveFactory::m_Initialized) { ArchiveFactory::registerCodec(new NullCodec()); ArchiveFactory::m_Initialized = true; }}IArchive* ArchiveFactory::openArchive(const char* archive) { ArchiveFactory::initialize(); Archive* arc = new Archive(); arc->setFile(archive); arc->open(); return arc;}IArchive* ArchiveFactory::createArchive(const char* archive) { return ArchiveFactory::openArchive(archive);}void ArchiveFactory::closeArchive(IArchive* archive) { ArchiveFactory::initialize(); Archive* arch = (Archive*)archive; arch->close(); delete arch;}ICodec* ArchiveFactory::getCodec(const char* codecName) { ICodec* codec = m_Codecs[codecName]; return (codec) ? codec : NULL;}void ArchiveFactory::registerCodec(ICodec* codec) { if (getCodec(codec->getName())!=NULL) { // TODO: handle errors return; } m_Codecs.insert(CodecMapPair(codec->getName(),codec));}