OMKTriggerContainerExtension.cpp

Go to the documentation of this file.
00001 
00002 /************************************************************************/
00003 /* This file is part of openMask(c) INRIA, CNRS, Universite de Rennes 1 */
00004 /* 1993-2002, thereinafter the Software                                 */
00005 /*                                                                      */
00006 /* The Software has been developped within the Siames Project.          */
00007 /* INRIA, the University of Rennes 1 and CNRS jointly hold intellectual */
00008 /* property rights                                                      */
00009 /*                                                                      */
00010 /* The Software has been registered with the Agence pour la Protection  */
00011 /* des Programmes (APP) under registration number                       */
00012 /* IDDN.FR.001.510008.00.S.P.2001.000.41200                             */
00013 /*                                                                      */
00014 /* This file may be distributed under the terms of the Q Public License */
00015 /* version 1.0 as defined by Trolltech AS of Norway and appearing in    */
00016 /* the file LICENSE.QPL included in the packaging of this file.         */
00017 /*                                                                      */
00018 /* Licensees holding valid specific licenses issued by INRIA, CNRS or   */
00019 /* Universite Rennes 1 for the software may use this file in            */
00020 /* acordance with that specific license                                 */
00021 /************************************************************************/
00022                 
00023 #include "OMKTriggerContainerExtension.h"
00024 #include "OMKValuedEventListenerCallBack.h"
00025 #include "OMKExtensibleSimulatedObject.h"
00026 #include "OMKExtension.h"
00027 
00028 using namespace OMK ;
00029 
00030 //=============================================================================
00031 // TriggerContainerExtension
00032 //=============================================================================
00033 
00034 REGISTER_EXTENSION_FACTORY( TriggerContainerExtension,  "TriggerContainer" ) ;
00035 //-----------------------------------------------------------------
00036 TriggerContainerExtension::TriggerContainerExtension( ExtensibleSimulatedObject* owner, const Name& id, bool registerExtension ) 
00037 : ExtensionT< ExtensibleSimulatedObject >( owner, id, registerExtension ),
00038   _onExtensionsSet(),
00039   _offExtensionsSet(),
00040   _trigger( 0 )
00041 {
00042   const ConfigurationParameterDescriptor* node = owner->getObjectDescriptor().getExtensionsParameters() ;
00043   const ConfigurationParameterDescriptor* extensionNode = 0 ;
00044   ParametersAccessor::get( node, getId().getString(), extensionNode ) ;
00045   const ConfigurationParameterDescriptor* extensionsNode = 0 ;
00046   ParametersAccessor::get( extensionNode, "ExtensionsOn", extensionsNode ) ;
00047   _onExtensionsSet.createExtensionsFromParameters( _owner, extensionsNode ) ;
00048   extensionsNode = 0 ;
00049   ParametersAccessor::get( extensionNode, "ExtensionsOff", extensionsNode ) ;
00050   _offExtensionsSet.createExtensionsFromParameters( _owner, extensionsNode ) ;
00051 }
00052 //-----------------------------------------------------------------
00053 TriggerContainerExtension::~TriggerContainerExtension() 
00054 { 
00055   _onExtensionsSet.deleteExtensions() ;
00056   _offExtensionsSet.deleteExtensions() ;
00057 }
00058 //-----------------------------------------------------------------
00059 bool TriggerContainerExtension::loadObjectParameters( const ConfigurationParameterDescriptor * node ) 
00060 {
00061   //---Load extension
00062   return _onExtensionsSet.loadFromObjectParameters( node )
00063       && _offExtensionsSet.loadFromObjectParameters( node ) ;
00064 }
00065 //-----------------------------------------------------------------
00066 bool TriggerContainerExtension::loadExtensionParameters( const ConfigurationParameterDescriptor * node ) 
00067 {
00068   bool ok = true ;
00069   //--- The trigger boolean attribute
00070   Name triggerId ;
00071   ok = ok && ParametersAccessor::get( node, "TriggerId", triggerId, _owner ) ;
00072   _trigger = _owner->getBaseAttribute< bool >( triggerId ) ;
00073   ok = ok && _trigger != 0 ;
00074   //---Load Extension On
00075   const ConfigurationParameterDescriptor* extensionsNode = 0 ;
00076   ParametersAccessor::get( node, "ExtensionsOn", extensionsNode ) ;
00077   //Load Extension order if there is one
00078   _onExtensionsSet.loadOrder( extensionsNode, "LoadParametersOrder", _onExtensionsSet._orderedExtensionsForLoadParameters ) ;
00079   //Load extension
00080   ok = ok && _onExtensionsSet.loadFromExtensionsParameters( extensionsNode ) ;
00081   _onExtensionsSet.loadOrder( extensionsNode, "PreComputeOrder"    , _onExtensionsSet._orderedExtensionsForPreCompute     ) ;
00082   _onExtensionsSet.loadOrder( extensionsNode, "PostComputeOrder"   , _onExtensionsSet._orderedExtensionsForPostCompute    ) ;
00083 
00084   //---Load Extension Off
00085   extensionsNode = 0 ;
00086   ParametersAccessor::get( node, "ExtensionsOff", extensionsNode ) ;
00087   //Load Extension order if there is one
00088   _offExtensionsSet.loadOrder( extensionsNode, "LoadParametersOrder", _offExtensionsSet._orderedExtensionsForLoadParameters ) ;
00089   //Load extension
00090   ok = ok && _offExtensionsSet.loadFromExtensionsParameters( extensionsNode ) ;
00091   _offExtensionsSet.loadOrder( extensionsNode, "PreComputeOrder"    , _offExtensionsSet._orderedExtensionsForPreCompute     ) ;
00092   _offExtensionsSet.loadOrder( extensionsNode, "PostComputeOrder"   , _offExtensionsSet._orderedExtensionsForPostCompute    ) ;
00093 
00094   return ok ;
00095 }
00096 //-----------------------------------------------------------------
00097 void TriggerContainerExtension::preComputeParameters()
00098 {
00099   ( _trigger->get() ? _onExtensionsSet : _offExtensionsSet ).preComputeExtension() ;
00100 }
00101 //-----------------------------------------------------------------
00102 void TriggerContainerExtension::postComputeParameters() 
00103 {
00104   ( _trigger->get() ? _onExtensionsSet : _offExtensionsSet ).postComputeExtension() ;
00105 }
00106 //-----------------------------------------------------------------
00107 
00108 
00109 //=============================================================================
00110 // MultiTriggerContainerExtension
00111 //=============================================================================
00112 
00113 REGISTER_EXTENSION_FACTORY( MultiTriggerContainerExtension,  "MultiTriggerContainer" ) ;
00114 //-----------------------------------------------------------------
00115 MultiTriggerContainerExtension::MultiTriggerContainerExtension( ExtensibleSimulatedObject* owner, const Name& id, bool registerExtension ) 
00116 : ExtensionT< ExtensibleSimulatedObject >( owner, id, registerExtension ),
00117   _default( 0 ),
00118   _extensionsSets(),
00119   _trigger( 0 )
00120 {
00121   const ConfigurationParameterDescriptor* node = owner->getObjectDescriptor().getExtensionsParameters() ;
00122   const ConfigurationParameterDescriptor* extensionNode = 0 ;
00123   ParametersAccessor::get( node, getId().getString(), extensionNode ) ;
00124   for( int i = 0 ; ; i++ )
00125   {
00126     std::ostringstream name ;
00127     name << "ExtensionsSet" << i ;
00128     const ConfigurationParameterDescriptor* extensionsNode = 0 ;
00129     if( ParametersAccessor::get( extensionNode, name.str(), extensionsNode ) )
00130     {
00131       _extensionsSets.push_back( ExtensionManager() ) ;
00132       _extensionsSets[ i ].createExtensionsFromParameters( _owner, extensionsNode ) ;
00133     }
00134   }
00135 }
00136 //-----------------------------------------------------------------
00137 MultiTriggerContainerExtension::~MultiTriggerContainerExtension() 
00138 { 
00139   for( size_t i = 0 ; i < _extensionsSets.size() ; i++ )
00140   {
00141     _extensionsSets[ i ].deleteExtensions() ;
00142   }
00143   _extensionsSets.clear() ;
00144 }
00145 //-----------------------------------------------------------------
00146 bool MultiTriggerContainerExtension::loadObjectParameters( const ConfigurationParameterDescriptor * node ) 
00147 {
00148   bool ok = true ;
00149   for( size_t i = 0 ; i < _extensionsSets.size() ; i++ )
00150   {
00151     ok = _extensionsSets[ i ].loadFromObjectParameters( node ) && ok ;
00152   }
00153   return ok ;
00154 }
00155 //-----------------------------------------------------------------
00156 bool MultiTriggerContainerExtension::loadExtensionParameters( const ConfigurationParameterDescriptor * node ) 
00157 {
00158   bool ok = true ;
00159   //--- The trigger boolean attribute
00160   Name triggerId ;
00161   ok = ok && ParametersAccessor::get( node, "TriggerId", triggerId, _owner ) ;
00162   _trigger = _owner->getBaseAttribute< int >( triggerId ) ;
00163   ok = ok && _trigger != 0 ;
00164   ParametersAccessor::get( node, "Default", _default ) ;
00165 
00166   //---Load Extensions
00167   for( size_t i = 0 ; i < _extensionsSets.size() ; i++ )
00168   {
00169     std::ostringstream name ;
00170     name << "ExtensionsSet" << i ;
00171     const ConfigurationParameterDescriptor* extensionsNode = 0 ;
00172     if( ParametersAccessor::get( node, name.str(), extensionsNode ) )
00173     {
00174       //Load Extension order if there is one
00175       _extensionsSets[ i ].loadOrder( extensionsNode, "LoadParametersOrder", _extensionsSets[ i ]._orderedExtensionsForLoadParameters ) ;
00176       //Load extension
00177       ok = ok && _extensionsSets[ i ].loadFromExtensionsParameters( extensionsNode ) ;
00178       _extensionsSets[ i ].loadOrder( extensionsNode, "PreComputeOrder"    , _extensionsSets[ i ]._orderedExtensionsForPreCompute     ) ;
00179       _extensionsSets[ i ].loadOrder( extensionsNode, "PostComputeOrder"   , _extensionsSets[ i ]._orderedExtensionsForPostCompute    ) ;
00180     }
00181   }
00182 
00183   return ok ;
00184 }
00185 //-----------------------------------------------------------------
00186 void MultiTriggerContainerExtension::preComputeParameters()
00187 {
00188   int index = _trigger->get() ;
00189   index = ( index < 0 || (int)_extensionsSets.size() < index ) ? _default : index ;
00190   _extensionsSets[ index ].preComputeExtension() ;
00191 }
00192 //-----------------------------------------------------------------
00193 void MultiTriggerContainerExtension::postComputeParameters() 
00194 {
00195   int index = _trigger->get() ;
00196   index = ( index < 0 || (int)_extensionsSets.size() < index ) ? _default : index ;
00197   _extensionsSets[ index ].postComputeExtension() ;
00198 }
00199 //-----------------------------------------------------------------
00200 

logo OpenMask

Documentation generated on Mon Jun 9 11:45:57 2008

Generated with doxygen by Dimitri van Heesch ,   1997-2007