00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef HAVE_CONFIG_H
00017 #include "torc/generic/config.h"
00018 #endif
00019
00020
00021 #include "torc/generic/om/ParameterMap.hpp"
00022 #include "torc/generic/om/Parameter.hpp"
00023 #include "torc/generic/om/Instance.hpp"
00024 #include "torc/generic/om/View.hpp"
00025
00026 namespace torc {
00027
00028 namespace generic {
00029
00030 ParameterSharedPtr
00031 ParameterMap::get(const ParameterContext &inContext,
00032 const std::string &inName) const throw() {
00033 if( !inContext )
00034 {
00035 return ParameterSharedPtr();
00036 }
00037 ParameterSharedPtr param;
00038 ParamDataPtr data;
00039 mParameters.get( inContext, data );
00040 if( !data )
00041 {
00042 return ParameterSharedPtr();
00043 }
00044 else
00045 {
00046 data->mParams.get( inName, param );
00047 if( !param )
00048 {
00049 return get( data->mParentContext, inName );
00050 }
00051 }
00052 return param;
00053 }
00054
00055 void
00056 ParameterMap::set(const ParameterContext &inContext,
00057 const std::string &inName,
00058 const ParameterSharedPtr &inParam) throw() {
00059 ParamDataPtr data;
00060 mParameters.get( inContext, data );
00061 if( !data )
00062 {
00063 return;
00064 }
00065 else
00066 {
00067 data->mParams.set( inName, inParam );
00068 }
00069 return;
00070 }
00071
00072 void
00073 ParameterMap::getAllParameters(
00074 const ParameterContext &inContext,
00075 std::map< std::string,ParameterSharedPtr > &outParams) const throw() {
00076 typedef std::map< std::string,ParameterSharedPtr > DataMap;
00077 ParamDataPtr data;
00078 mParameters.get( inContext, data );
00079 if( !data )
00080 {
00081 return;
00082 }
00083 else
00084 {
00085 if( data->mParentContext )
00086 {
00087 ParamDataPtr parentData;
00088 mParameters.get( data->mParentContext, parentData );
00089 parentData->mParams.getValueMap(outParams);
00090 DataMap::iterator param = outParams.begin();
00091 DataMap::iterator pEnd = outParams.end();
00092 for(;param != pEnd; ++param )
00093 {
00094 ParameterSharedPtr newValue;
00095 data->mParams.get( (*param).first, newValue );
00096
00097 if( newValue )
00098 {
00099 outParams[ (*param).first ] = newValue;
00100 }
00101 }
00102 }
00103 else
00104 {
00105
00106 data->mParams.getValueMap(outParams);
00107 }
00108 }
00109
00110 return;
00111 }
00112
00113 void
00114 ParameterMap::getOverriddenParameters(
00115 const ParameterContext &inContext,
00116 std::map< std::string,ParameterSharedPtr > &outParams) const throw() {
00117 typedef std::map< std::string,ParameterSharedPtr > DataMap;
00118 ParamDataPtr data;
00119 mParameters.get( inContext, data );
00120 if( !data )
00121 {
00122 return;
00123 }
00124 else
00125 {
00126
00127 data->mParams.getValueMap(outParams);
00128 }
00129 return;
00130 }
00131
00132 ParameterContext
00133 ParameterMap::getNewContext() throw() {
00134 return mNextContext++;
00135 }
00136
00137 void
00138 ParameterMap::registerContext(
00139 const ParameterContext &inContext,
00140 const ParameterContext &inParentContext) throw(Error)
00141 {
00142 ParamDataPtr data;
00143 mParameters.get( inContext, data);
00144 if( data )
00145 {
00146
00147 }
00148 else
00149 {
00150 data = boost::shared_ptr<ParamData>( new ParamData() );
00151 data->mParentContext = inParentContext;
00152 mParameters.set( inContext, data );
00153 }
00154 }
00155
00156 bool
00157 ParameterMap::isContextRegistered(
00158 const ParameterContext &inContext ) const throw()
00159 {
00160 ParamDataPtr data;
00161 mParameters.get( inContext, data);
00162 return data;
00163 }
00164
00165 void
00166 ParameterMap::unregisterContext(
00167 const ParameterContext &inContext ) throw()
00168 {
00169 mParameters.remove( inContext );
00170 }
00171
00172 ParameterMap::ParameterMap()
00173 :mParameters(),
00174 mNextContext( 1 ) {
00175 }
00176
00177 ParameterMap::~ParameterMap() throw() {
00178 }
00179
00180 ParameterMap::ParameterMap(
00181 const ParameterMap & source) throw()
00182 :mParameters( source.mParameters ),
00183 mNextContext( 1 ) {
00184 }
00185
00186 ParameterMap &
00187 ParameterMap::operator=(
00188 const ParameterMap & source) throw() {
00189 if( this != &source )
00190 {
00191 mParameters = source.mParameters;
00192 mNextContext = 1;
00193 }
00194 return *this;
00195 }
00196
00197
00198 }
00199
00200 }