All pastes #42468 Raw Edit

jedir0x0r in C++

public cpp v1 · immutable
#42468 ·published 2006-02-21 01:17 UTC
rendered paste body
ArchiveFactory.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));}