diff options
39 files changed, 91 insertions, 192 deletions
| diff --git a/project2/cgi/cgiAppEngine.cpp b/project2/cgi/cgiAppEngine.cpp index a503f3d..c7ee3e6 100644 --- a/project2/cgi/cgiAppEngine.cpp +++ b/project2/cgi/cgiAppEngine.cpp @@ -18,7 +18,7 @@ SimpleMessageException(UnknownDomain);  CgiApplicationEngine::CgiApplicationEngine(const CgiEnvironment * e, std::ostream & io) :  	_env(e), -	sessionsContainer(LoaderBase::getLoader<SessionContainerLoader, NotSupported>(e->sessionModule)->open()), +	sessionsContainer(SessionContainerLoader::getFor(e->sessionModule)->create()),  	IO(io),  	outputCachingActive(false)  { diff --git a/project2/cgi/cgiOutputOptions.cpp b/project2/cgi/cgiOutputOptions.cpp index e18a0b8..ba4d621 100644 --- a/project2/cgi/cgiOutputOptions.cpp +++ b/project2/cgi/cgiOutputOptions.cpp @@ -32,7 +32,7 @@ OutputOptionsLoader::OutputOptionsLoader() :  }  OutputOptionsPtr -OutputOptionsLoader::createFrom(ScriptNodePtr e) const { +OutputOptionsLoader::create(ScriptNodePtr e) const {  	return new OutputOptions(e);  } diff --git a/project2/cgi/cgiOutputOptions.h b/project2/cgi/cgiOutputOptions.h index 4a4f1c8..faace67 100644 --- a/project2/cgi/cgiOutputOptions.h +++ b/project2/cgi/cgiOutputOptions.h @@ -31,7 +31,7 @@ typedef boost::intrusive_ptr<OutputOptions> OutputOptionsPtr;  class OutputOptionsLoader : public ComponentLoader {  	public:  		OutputOptionsLoader(); -		OutputOptionsPtr createFrom(ScriptNodePtr e) const; +		OutputOptionsPtr create(ScriptNodePtr e) const;  		const Options * options() const;  	private: diff --git a/project2/cgi/cgiStagePresent.cpp b/project2/cgi/cgiStagePresent.cpp index 9c7ab7f..98031e4 100644 --- a/project2/cgi/cgiStagePresent.cpp +++ b/project2/cgi/cgiStagePresent.cpp @@ -52,7 +52,7 @@ MultiRowSetPresenterPtr  CgiApplicationEngine::PresentStage::getPresenter() const  {  	if (!presenter) { -		presenter = LoaderBase::getLoader<PresenterLoader, NotSupported>(env()->defaultPresenter)->createFrom(root); +		presenter = PresenterLoader::getFor(env()->defaultPresenter)->create(root);  	}  	return presenter;  } diff --git a/project2/common/genericLoader.h b/project2/common/genericLoader.h deleted file mode 100644 index cd129f0..0000000 --- a/project2/common/genericLoader.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef GENERICLOADER_H -#define GENERICLOADER_H - -#include "scriptLoader.h" - -template <class Impl, typename... Params> -class GenLoader : public ComponentLoader { -	public: -		template <class T> -		class For : public GenLoader<Impl, Params...> { -			public: -				inline Impl * create(const Params & ... p) const -				{ -					return new T(p...); -				} -		}; -		virtual Impl * create(const Params & ...) const = 0; -		inline static boost::shared_ptr<GenLoader<Impl, Params...>> getFor(const char * n) -		{ -			return LoaderBase::getLoader<GenLoader<Impl, Params...>, NotSupported>(n); -		} -}; -#define DECLARE_GENERIC_LOADER(N, B, T) \ -	DECLARE_CUSTOM_COMPONENT_LOADER(N, T, B::For<T>, B); - -#endif - diff --git a/project2/common/library.cpp b/project2/common/library.cpp index f7cc51c..b53a6b0 100644 --- a/project2/common/library.cpp +++ b/project2/common/library.cpp @@ -25,7 +25,7 @@ Library::~Library()  }  STORAGEOF(Library) libraries; -class LibraryLoader : public ElementLoaderImpl<Library> { +class LibraryLoader : public ElementLoader::For<Library> {  	public:  		void onIteration()  		{ diff --git a/project2/common/memoryCache.cpp b/project2/common/memoryCache.cpp index a24abb3..cd13930 100644 --- a/project2/common/memoryCache.cpp +++ b/project2/common/memoryCache.cpp @@ -145,7 +145,7 @@ class MemoryCache : public Cache {  time_t MemoryCache::CacheLife;  MemoryCache::CacheStore MemoryCache::Store; -class CustomMemoryCacheLoader : public ElementLoaderImpl<MemoryCache> { +class CustomMemoryCacheLoader : public ElementLoader::For<MemoryCache> {  	public:  		CustomMemoryCacheLoader() :  			opts("Memory Cache options") diff --git a/project2/common/optionsSource.h b/project2/common/optionsSource.h index f238a66..208e5ff 100644 --- a/project2/common/optionsSource.h +++ b/project2/common/optionsSource.h @@ -22,20 +22,7 @@ class OptionsSource : public IntrusivePtrBase {  typedef boost::intrusive_ptr<OptionsSource> OptionsSourcePtr;  /// Base class to implement presenter modules -class OptionsSourceLoader : public ComponentLoader { -	public: -		virtual OptionsSourcePtr create() const = 0; -}; - -/// Helper implemention for specific presenters -template <class OptionsSourceType> -class OptionsSourceLoaderImpl : public OptionsSourceLoader { -	public: -		virtual OptionsSourcePtr create() const -		{ -			return new OptionsSourceType(); -		} -}; +typedef GenLoader<OptionsSource> OptionsSourceLoader;  #endif diff --git a/project2/common/presenter.h b/project2/common/presenter.h index a16b32b..e1a78dd 100644 --- a/project2/common/presenter.h +++ b/project2/common/presenter.h @@ -76,21 +76,7 @@ typedef boost::intrusive_ptr<RowSetPresenter> RowSetPresenterPtr;  typedef boost::intrusive_ptr<MultiRowSetPresenter> MultiRowSetPresenterPtr;  typedef boost::intrusive_ptr<NameValuePairPresenter> NameValuePairPresenterPtr; -/// Base class to implement presenter modules -class PresenterLoader : public ComponentLoader { -	public: -		virtual MultiRowSetPresenterPtr createFrom(ScriptNodePtr e) const = 0; -}; - -/// Helper implemention for specific presenters -template <class PresenterType> -class PresenterLoaderImpl : public PresenterLoader { -	public: -		virtual MultiRowSetPresenterPtr createFrom(ScriptNodePtr e) const -		{ -			return new PresenterType(e); -		} -}; +typedef GenLoader<MultiRowSetPresenter, ScriptNodePtr> PresenterLoader;  #endif diff --git a/project2/common/scriptLoader.h b/project2/common/scriptLoader.h index b2faecd..ccc7afb 100644 --- a/project2/common/scriptLoader.h +++ b/project2/common/scriptLoader.h @@ -8,16 +8,18 @@  #include <boost/shared_ptr.hpp>  #include "intrusivePtrBase.h"  #include "sourceObject.h" +#include "scripts_fwd.h"  #include "exceptions.h"  #include <glibmm/ustring.h>  #include <map>  #include <vector> -class ElementLoader;  class ComponentLoader;  class CommonObjects;  class Storer;  class ScriptReader; +class SourceObject; +typedef boost::intrusive_ptr<SourceObject> SourceObjectPtr;  class LoaderBase {  	public: @@ -90,7 +92,7 @@ class LoaderBase {  		static ScriptNodePtr getSub(ScriptNodePtr root, const Glib::ustring & name, bool required);  		Targets targets;  		static unsigned int depth; -		template <class X> friend class ElementLoaderImpl; +		friend class SourceObject;  		static std::set<SourceObjectPtr> loadedObjects;  		const bool recursive; @@ -107,9 +109,11 @@ class LoaderBase {  #define DECLARE_CUSTOM_LOADER(N, T) \  	DECLARE_CUSTOM_COMPONENT_LOADER(N, T, T, ElementLoader)  #define DECLARE_COMPONENT_LOADER(N, T, B) \ -	DECLARE_CUSTOM_COMPONENT_LOADER(N, T, B##Impl<T>, B) +	DECLARE_CUSTOM_COMPONENT_LOADER(N, T, B::For<T>, B)  #define DECLARE_LOADER(N, T) \  	DECLARE_COMPONENT_LOADER(N, T, ElementLoader) +#define DECLARE_GENERIC_LOADER(N, B, T) \ +	DECLARE_CUSTOM_COMPONENT_LOADER(N, T, B::For<T>, B);  /// Helper for loading and maintaining Project2 components  class Options; @@ -123,22 +127,27 @@ class ComponentLoader {  		virtual void onPeriodic();	// When the app engine feels like it  		virtual const Options * options() const;	// Options to be populated from the common config file/env/etc  }; -/// Helper for loading and maintaining Project2 script components -class ElementLoader : public ComponentLoader { -	public: -		virtual SourceObjectPtr createFrom(ScriptNodePtr) const = 0; -}; -/// Helper for loading and maintaining Project2 script components (typed implementation) -template <class X> -class ElementLoaderImpl : public ElementLoader { +template <class Impl, typename... Params> +class GenLoader : public ComponentLoader {  	public: -		SourceObjectPtr createFrom(ScriptNodePtr sn) const +		template <class T> +		class For : public GenLoader<Impl, Params...> { +			public: +				inline Impl * create(const Params & ... p) const +				{ +					return new T(p...); +				} +		}; +		virtual Impl * create(const Params & ...) const = 0; +		inline static boost::shared_ptr<GenLoader<Impl, Params...>> getFor(const std::string & n)  		{ -			SourceObjectPtr sop = new X(sn); -			LoaderBase::loadedObjects.insert(sop); -			return sop; +			return LoaderBase::getLoader<GenLoader<Impl, Params...>, NotSupported>(n);  		}  }; + +/// Helper for loading and maintaining Project2 script components +typedef GenLoader<SourceObject, ScriptNodePtr> ElementLoader; +  #endif diff --git a/project2/common/scriptStorage.h b/project2/common/scriptStorage.h index c58711b..63ee71c 100644 --- a/project2/common/scriptStorage.h +++ b/project2/common/scriptStorage.h @@ -132,25 +132,25 @@ class StorerImpl<X, ANONORDEREDSTORAGEOF(X), L> : public StorerBase<X, L> {  template <class L, class X, typename... C>  boost::intrusive_ptr<StorerBase<X, L> >  Storer::into(SINGLE(X) * obj, const C & ... c) { -	return new StorerImpl<X, SINGLE(X), L>(obj, boost::bind(&L::createFrom, _1, _2, c...)); +	return new StorerImpl<X, SINGLE(X), L>(obj, boost::bind(&L::create, _1, _2, c...));  }  template <class L, class X, typename... C>  boost::intrusive_ptr<StorerBase<X, L> >  Storer::into(STORAGEOF(X) * map, const C & ... c) { -	return new StorerImpl<X, STORAGEOF(X), L>(map, boost::bind(&L::createFrom, _1, _2, c...)); +	return new StorerImpl<X, STORAGEOF(X), L>(map, boost::bind(&L::create, _1, _2, c...));  }  template <class L, class X, typename... C>  boost::intrusive_ptr<StorerBase<X, L> >  Storer::into(ANONSTORAGEOF(X) * set, const C & ... c) { -	return new StorerImpl<X, ANONSTORAGEOF(X), L>(set, boost::bind(&L::createFrom, _1, _2, c...)); +	return new StorerImpl<X, ANONSTORAGEOF(X), L>(set, boost::bind(&L::create, _1, _2, c...));  }  template <class L, class X, typename... C>  boost::intrusive_ptr<StorerBase<X, L> >  Storer::into(ANONORDEREDSTORAGEOF(X) * list, const C & ... c) { -	return new StorerImpl<X, ANONORDEREDSTORAGEOF(X), L>(list, boost::bind(&L::createFrom, _1, _2, c...)); +	return new StorerImpl<X, ANONORDEREDSTORAGEOF(X), L>(list, boost::bind(&L::create, _1, _2, c...));  }  #endif diff --git a/project2/common/scripts.h b/project2/common/scripts.h index 972c23f..ba5a8e9 100644 --- a/project2/common/scripts.h +++ b/project2/common/scripts.h @@ -6,6 +6,7 @@  #include <boost/function.hpp>  #include <boost/optional.hpp>  #include "scriptLoader.h" +#include "scripts_fwd.h"  #include "exceptions.h"  #include "variables.h"  #include <vector> @@ -14,11 +15,6 @@ SimpleMessageException(ValueNotFound);  SimpleMessage2Exception(ScriptNotFound);  SimpleMessage2Exception(DependencyNotFound); -class ScriptNode; -class ScriptReader; -typedef boost::intrusive_ptr<const ScriptNode> ScriptNodePtr; -typedef boost::intrusive_ptr<const ScriptReader> ScriptReaderPtr; -  class ScriptNode : public IntrusivePtrBase {  	public:  		ScriptNode(ScriptReaderPtr); diff --git a/project2/common/scripts_fwd.h b/project2/common/scripts_fwd.h new file mode 100644 index 0000000..7d5ed00 --- /dev/null +++ b/project2/common/scripts_fwd.h @@ -0,0 +1,11 @@ +#ifndef SCRIPTS_FWD_H +#define SCRIPTS_FWD_H + +#include <boost/intrusive_ptr.hpp> + +class ScriptNode; +class ScriptReader; +typedef boost::intrusive_ptr<const ScriptNode> ScriptNodePtr; +typedef boost::intrusive_ptr<const ScriptReader> ScriptReaderPtr; + +#endif diff --git a/project2/common/sessionContainer.h b/project2/common/sessionContainer.h index ffbc5ed..2a20085 100644 --- a/project2/common/sessionContainer.h +++ b/project2/common/sessionContainer.h @@ -17,22 +17,7 @@ class SessionContainer : public IntrusivePtrBase {  		virtual SessionPtr getSession(const UUID & sid) const = 0;  };  typedef boost::intrusive_ptr<SessionContainer> SessionContainerPtr; - -/// Base class to implement session container imlpementations -class SessionContainerLoader : public ComponentLoader { -	public: -		virtual SessionContainerPtr open() const = 0; -}; - -/// Helper implemention for specific container types -template <class SCType> -class SessionContainerLoaderImpl : public SessionContainerLoader { -	public: -		virtual SessionContainerPtr open() const -		{ -			return new SCType(); -		} -}; +typedef GenLoader<SessionContainer> SessionContainerLoader;  #endif diff --git a/project2/common/sourceObject.cpp b/project2/common/sourceObject.cpp index ccc1034..e66e9ee 100644 --- a/project2/common/sourceObject.cpp +++ b/project2/common/sourceObject.cpp @@ -7,12 +7,14 @@ SourceObject::SourceObject(ScriptNodePtr p) :  	name(p ? p->value("name", "anon").as<std::string>() : "anon"),  	order(loadOrder++)  { +	LoaderBase::loadedObjects.insert(this);  }  SourceObject::SourceObject(const std::string & n) :  	name(n),  	order(loadOrder++)  { +	LoaderBase::loadedObjects.insert(this);  }  SourceObject::~SourceObject() diff --git a/project2/common/sourceObject.h b/project2/common/sourceObject.h index 4d10dd4..8cf75ad 100644 --- a/project2/common/sourceObject.h +++ b/project2/common/sourceObject.h @@ -4,12 +4,10 @@  #include <boost/intrusive_ptr.hpp>  #include <string>  #include "intrusivePtrBase.h" +#include "scriptLoader.h" +#include "scripts_fwd.h"  class CommonObjects; -class SourceObject; -class ScriptNode; -typedef boost::intrusive_ptr<SourceObject> SourceObjectPtr; -typedef boost::intrusive_ptr<const ScriptNode> ScriptNodePtr;  /// Base class for all Project2 components that can be placed in a Project2 script  class SourceObject : public virtual IntrusivePtrBase {  	public: diff --git a/project2/common/transform.cpp b/project2/common/transform.cpp index 9a53107..874ced3 100644 --- a/project2/common/transform.cpp +++ b/project2/common/transform.cpp @@ -12,7 +12,7 @@ class TransformTargetStorer : public Storer {  		}  		boost::intrusive_ptr<IntrusivePtrBase> create(ScriptNodePtr p) const  		{ -			return LoaderBase::getLoader<TransformTargetLoader, NotSupported>(p->get_name())->createFrom(p); +			return LoaderBase::getLoader<TransformTargetLoader, NotSupported>(p->get_name())->create(p);  		}  		bool save(boost::intrusive_ptr<IntrusivePtrBase> o, ScriptNodePtr s)  		{ diff --git a/project2/common/transform.h b/project2/common/transform.h index e2216d7..2355195 100644 --- a/project2/common/transform.h +++ b/project2/common/transform.h @@ -45,32 +45,10 @@ class Transform : public virtual IntrusivePtrBase {  		virtual void configure(ScriptNodePtr) { };  }; -class TransformLoader : public ComponentLoader { -	public: -		virtual boost::intrusive_ptr<Transform> create() const = 0; -}; - -template <class T> -class TransformLoaderImpl : public TransformLoader { -	public: -		boost::intrusive_ptr<Transform> create() const { -			return new T(); -		} -}; +typedef GenLoader<Transform> TransformLoader;  #define DECLARE_TRANSFORM(T) DECLARE_COMPONENT_LOADER(#T, T, TransformLoader) -class TransformTargetLoader : public ComponentLoader { -	public: -		virtual boost::intrusive_ptr<TransformChainLink> createFrom(ScriptNodePtr) const = 0; -}; - -template <class T> -class TransformTargetLoaderImpl : public TransformTargetLoader { -	public: -		boost::intrusive_ptr<TransformChainLink> createFrom(ScriptNodePtr s) const { -			return new T(s); -		} -}; +typedef GenLoader<TransformChainLink, ScriptNodePtr> TransformTargetLoader;  #define DECLARE_TRANSFORMTARGET(N, T) DECLARE_COMPONENT_LOADER(N, T, TransformTargetLoader)  template <class Source, class Destination> diff --git a/project2/common/variables-modconfig.cpp b/project2/common/variables-modconfig.cpp index 3f5e25a..4d9553a 100644 --- a/project2/common/variables-modconfig.cpp +++ b/project2/common/variables-modconfig.cpp @@ -33,7 +33,7 @@ class VariableConfig : public VariableImplDyn {  		const Glib::ustring name;  }; -class VariableConfigLoader : public VariableLoaderImpl<VariableConfig> { +class VariableConfigLoader : public VariableLoader::For<VariableConfig> {  	public:  		class AppSettings : public Options::Option {  			public: diff --git a/project2/common/variables-modliteral.cpp b/project2/common/variables-modliteral.cpp index 8c165ee..33c9ad5 100644 --- a/project2/common/variables-modliteral.cpp +++ b/project2/common/variables-modliteral.cpp @@ -73,6 +73,6 @@ VariableLiteral::VarPart::operator VariableType() const  }  DECLARE_COMPONENT_LOADER("literal", VariableLiteral, VariableLoader); -DECLARE_CUSTOM_COMPONENT_LOADER("", VariableLiteralDef, VariableLoaderImpl<VariableLiteral>, VariableLoader); +DECLARE_CUSTOM_COMPONENT_LOADER("", VariableLiteralDef, VariableLoader::For<VariableLiteral>, VariableLoader); diff --git a/project2/common/variables.h b/project2/common/variables.h index ca2cdc7..932da90 100644 --- a/project2/common/variables.h +++ b/project2/common/variables.h @@ -136,19 +136,7 @@ class VariableImplDyn : public VariableImpl {  };  /// Base class to create variables -class VariableLoader : public ComponentLoader { -	public: -		virtual VariableImpl * create(ScriptNodePtr) const = 0; -}; -/// Helper implementation of VariableLoader for specific variable types -template <class VarType> -class VariableLoaderImpl : public VariableLoader { -	public: -		virtual VariableImpl * create(ScriptNodePtr e) const -		{ -			return new VarType(e); -		} -}; +typedef GenLoader<VariableImpl, ScriptNodePtr> VariableLoader;  #endif diff --git a/project2/compression/Jamfile.jam b/project2/compression/Jamfile.jam index 99d3b75..b1715cb 100644 --- a/project2/compression/Jamfile.jam +++ b/project2/compression/Jamfile.jam @@ -12,6 +12,6 @@ lib p2compression :  	<library>glibmm  	<library>libz  	<library>../common//p2common -	<library>../files//p2files +	<library>../streams//p2streams  	; diff --git a/project2/compression/decompressor.h b/project2/compression/decompressor.h index dfa1db7..32be53a 100644 --- a/project2/compression/decompressor.h +++ b/project2/compression/decompressor.h @@ -2,7 +2,6 @@  #define DECOMPRESSOR  #include "stream.h" -#include "genericLoader.h"  #include "intrusivePtrBase.h"  class Decompressor : public IntrusivePtrBase { diff --git a/project2/files/fsRows.cpp b/project2/files/fsRows.cpp index 9dfa3f8..72a2055 100644 --- a/project2/files/fsRows.cpp +++ b/project2/files/fsRows.cpp @@ -80,7 +80,7 @@ FsRows::execute(const Glib::ustring &, const RowProcessor * rp) const  		for (SpecSpec::const_iterator sf = s.begin(); sf != s.end(); ) {  			const Glib::ustring & name = (*sf++);  			if (name[0] == '-') { -				ss.specs.insert(LoaderBase::getLoader<SpecBaseLoader, NotSupported>(name.substr(1))->create(*sf++)); +				ss.specs.insert(LoaderBase::getLoader<SpecBaseLoader, NotSupported>(name.substr(1))->createWith(*sf++));  			}  			else {  				throw NotSupported(name); diff --git a/project2/files/fsRows.h b/project2/files/fsRows.h index acbce0d..6b689d3 100644 --- a/project2/files/fsRows.h +++ b/project2/files/fsRows.h @@ -7,6 +7,7 @@  #include "variables.h"  #include "rowSet.h"  #include "scriptStorage.h" +#include "scriptLoader.h"  class CommonObjects; @@ -24,21 +25,22 @@ class FsRows : public RowSet {  				const struct stat & curStat(const SearchState * fs) const;  		};  		typedef boost::intrusive_ptr<SpecBase> SpecBasePtr; -		class SpecBaseLoader : public ComponentLoader { +		template <class X> +		class SpecBaseLoaderX : public GenLoader<SpecBase, ScriptNodePtr> {  			public: -				virtual SpecBasePtr createFrom(ScriptNodePtr) const = 0; -				virtual SpecBasePtr create(const Glib::ustring &) const = 0; -		}; -		template <class T> -		class SpecBaseLoaderImpl : public SpecBaseLoader { -			public: -				SpecBasePtr createFrom(ScriptNodePtr s) const { -					return new T(s); -				} -				SpecBasePtr create(const Glib::ustring & v) const { -					return new T(v); -				} +				virtual SpecBase * createWith(const Glib::ustring &) const = 0; +				template <class T> +				class For : public SpecBaseLoaderX<X> { +					public: +						SpecBase * create(const ScriptNodePtr & v) const { +							return new T(v); +						} +						SpecBase * createWith(const Glib::ustring & v) const { +							return new T(v); +						} +				};  		}; +		typedef SpecBaseLoaderX<void> SpecBaseLoader;  		typedef ANONSTORAGEOF(SpecBase) SpecBases;  		typedef std::list<Glib::ustring> SpecSpec;  		typedef boost::filesystem::path Path; diff --git a/project2/files/presenterCache.cpp b/project2/files/presenterCache.cpp index 789dd95..8d189b5 100644 --- a/project2/files/presenterCache.cpp +++ b/project2/files/presenterCache.cpp @@ -139,7 +139,7 @@ boost::filesystem::path FilePresenterCache::Store;  std::string FilePresenterCache::FileName;  time_t FilePresenterCache::CacheLife; -class FilePresenterCacheLoader : public ElementLoaderImpl<FilePresenterCache> { +class FilePresenterCacheLoader : public ElementLoader::For<FilePresenterCache> {  	public:  		FilePresenterCacheLoader() :  			opts("XML Cache options") diff --git a/project2/json/couchSession.cpp b/project2/json/couchSession.cpp index 5d964aa..a6c49e9 100644 --- a/project2/json/couchSession.cpp +++ b/project2/json/couchSession.cpp @@ -105,7 +105,7 @@ class CouchSessionContainer : public SessionContainer {  std::vector<std::string> CouchSessionContainer::baseUrls;  const Glib::ustring CouchSessionContainer::ExpiryKey("project2:expires"); -class CustomCouchSessionLoader : public SessionContainerLoaderImpl<CouchSessionContainer> { +class CustomCouchSessionLoader : public SessionContainerLoader::For<CouchSessionContainer> {  	public:  		CustomCouchSessionLoader() :  			opts("Session CouchDB options") diff --git a/project2/json/presenter.cpp b/project2/json/presenter.cpp index 0eb484b..b76f232 100644 --- a/project2/json/presenter.cpp +++ b/project2/json/presenter.cpp @@ -97,4 +97,4 @@ class JsonPresenter : public MultiRowSetPresenter, public ContentPresenter, publ  		mutable std::stack<json::Object *> curRowSet;  		mutable std::stack<json::Array *> curRowArray;  }; -DECLARE_COMPONENT_LOADER("json", JsonPresenter, PresenterLoader) +DECLARE_GENERIC_LOADER("json", PresenterLoader, JsonPresenter) diff --git a/project2/mail/sendmailTask.cpp b/project2/mail/sendmailTask.cpp index f8bc879..f70fe64 100644 --- a/project2/mail/sendmailTask.cpp +++ b/project2/mail/sendmailTask.cpp @@ -14,7 +14,7 @@  std::string SendMailTask::defaultMailServer;  std::string SendMailTask::defaultMailEncoding; -class CustomSendMailTaskLoader : public ElementLoaderImpl<SendMailTask> { +class CustomSendMailTaskLoader : public ElementLoader::For<SendMailTask> {  	public:  		CustomSendMailTaskLoader() :  			opts("Send Email Task options") diff --git a/project2/sql/connectionLoader.h b/project2/sql/connectionLoader.h index 3dc5f93..89de76b 100644 --- a/project2/sql/connectionLoader.h +++ b/project2/sql/connectionLoader.h @@ -4,21 +4,7 @@  #include "scriptLoader.h"  #include "../libdbpp/connection.h" -/// Base class to implement DB connection type modules -class ConnectionLoader : public ComponentLoader { -	public: -		virtual DB::Connection * connect(const std::string & dsn) const = 0; -}; - -/// Helper implemention for specific DB types -template <class DBType> -class ConnectionLoaderImpl : public ConnectionLoader { -	public: -		virtual DB::Connection * connect(const std::string & dsn) const -		{ -			return new DBType(dsn); -		} -}; +typedef GenLoader<DB::Connection, std::string> ConnectionLoader;  #endif diff --git a/project2/sql/rdbmsDataSource.cpp b/project2/sql/rdbmsDataSource.cpp index 6f3cedb..8bdacdf 100644 --- a/project2/sql/rdbmsDataSource.cpp +++ b/project2/sql/rdbmsDataSource.cpp @@ -9,7 +9,7 @@  SimpleMessageException(UnknownConnectionProvider);  /// Specialized ElementLoader for instances of RdbmsDataSource; handles persistent DB connections -class RdbmsDataSourceLoader : public ElementLoaderImpl<RdbmsDataSource> { +class RdbmsDataSourceLoader : public ElementLoader::For<RdbmsDataSource> {  	public:  		void onIdle()  		{ @@ -201,7 +201,7 @@ RdbmsDataSource::ConnectionInfo::ConnectionInfo(ScriptNodePtr node) :  DB::Connection *  RdbmsDataSource::ConnectionInfo::connect() const  { -	return typeId->connect(dsn); +	return typeId->create(dsn);  }  bool diff --git a/project2/sql/rdbmsDataSource.h b/project2/sql/rdbmsDataSource.h index c0345a0..6d3b184 100644 --- a/project2/sql/rdbmsDataSource.h +++ b/project2/sql/rdbmsDataSource.h @@ -8,8 +8,7 @@  #include "../libdbpp/connection.h"  #include "../libdbpp/error.h"  #include "scriptLoader.h" - -class ConnectionLoader; +#include "connectionLoader.h"  /// Project2 component to provide access to transactional RDBMS data sources  class RdbmsDataSource : public DataSource { diff --git a/project2/sql/sql-modODBC.cpp b/project2/sql/sql-modODBC.cpp index 1703cb6..284d02e 100644 --- a/project2/sql/sql-modODBC.cpp +++ b/project2/sql/sql-modODBC.cpp @@ -1,4 +1,4 @@  #include "connectionLoader.h"  #include "../libodbcpp/connection.h"  typedef ODBC::Connection ODBCConnection; -DECLARE_COMPONENT_LOADER("odbc", ODBCConnection, ConnectionLoader) +DECLARE_GENERIC_LOADER("odbc", ConnectionLoader, ODBCConnection) diff --git a/project2/sql/sql-modPQ.cpp b/project2/sql/sql-modPQ.cpp index 5991754..cb753e0 100644 --- a/project2/sql/sql-modPQ.cpp +++ b/project2/sql/sql-modPQ.cpp @@ -1,4 +1,4 @@  #include "connectionLoader.h"  #include "../libpqpp/connection.h"  typedef PQ::Connection PQConnection; -DECLARE_COMPONENT_LOADER("postgresql", PQConnection, ConnectionLoader) +DECLARE_GENERIC_LOADER("postgresql", ConnectionLoader, PQConnection) diff --git a/project2/sql/sqlCache.cpp b/project2/sql/sqlCache.cpp index e94e345..08d2831 100644 --- a/project2/sql/sqlCache.cpp +++ b/project2/sql/sqlCache.cpp @@ -257,7 +257,7 @@ std::string SqlCache::DataSource;  std::string SqlCache::HeaderTable;  time_t SqlCache::CacheLife; -class CustomSqlCacheLoader : public ElementLoaderImpl<SqlCache> { +class CustomSqlCacheLoader : public ElementLoader::For<SqlCache> {  	public:  		CustomSqlCacheLoader() :  			opts("SQL Cache options") diff --git a/project2/xml/sessionXml.cpp b/project2/xml/sessionXml.cpp index a3455f6..db34b52 100644 --- a/project2/xml/sessionXml.cpp +++ b/project2/xml/sessionXml.cpp @@ -8,7 +8,7 @@  #include <boost/lexical_cast.hpp>  #include "options.h" -class CustomSessionContainerLoaderXml : public SessionContainerLoaderImpl<SessionContainerXml> { +class CustomSessionContainerLoaderXml : public SessionContainerLoader::For<SessionContainerXml> {  	public:  		CustomSessionContainerLoaderXml() :  			opts("SessionXML options") diff --git a/project2/xml/transformText.cpp b/project2/xml/transformText.cpp index efe0c0b..02c12e3 100644 --- a/project2/xml/transformText.cpp +++ b/project2/xml/transformText.cpp @@ -35,7 +35,7 @@ TextDocument::getContentClass() const {  }  class TransformHtmlToText; -class TransformHtmlToTextLoader : public TransformLoaderImpl<TransformHtmlToText> { +class TransformHtmlToTextLoader : public TransformLoader::For<TransformHtmlToText> {  	public:  		TransformHtmlToTextLoader() :  			opts("Transform HTML to text options") diff --git a/project2/xml/xmlCache.cpp b/project2/xml/xmlCache.cpp index 0ec745b..abe56ab 100644 --- a/project2/xml/xmlCache.cpp +++ b/project2/xml/xmlCache.cpp @@ -84,7 +84,7 @@ boost::filesystem::path XmlCache::Store;  std::string XmlCache::FileName;  time_t XmlCache::CacheLife; -class CustomXmlCacheLoader : public ElementLoaderImpl<XmlCache> { +class CustomXmlCacheLoader : public ElementLoader::For<XmlCache> {  	public:  		CustomXmlCacheLoader() :  			opts("XML Cache options") diff --git a/project2/xml/xmlPresenter.cpp b/project2/xml/xmlPresenter.cpp index 02ec82d..a6d6f40 100644 --- a/project2/xml/xmlPresenter.cpp +++ b/project2/xml/xmlPresenter.cpp @@ -7,7 +7,7 @@  #include <boost/date_time/posix_time/time_formatters.hpp>  #include <boost/date_time/gregorian/formatters.hpp> -class XmlPresenterLoader : public PresenterLoaderImpl<XmlPresenter> { +class XmlPresenterLoader : public PresenterLoader::For<XmlPresenter> {  	public:  		XmlPresenterLoader() :  			opts("XML Cache options") | 
