Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

/home/pauldt/projects/IDEA/IDEA-ALL/IDEA-DEV/Core/PlanServer/Includes/PslFactory.hh

Go to the documentation of this file.
00001 // -*- Mode: C++ -*-
00002 //      CVS: $Id: PslFactory.hh,v 1.11 2005/12/30 22:15:00 rijsman Exp $
00003 //      Tag: $name$
00004 //     Info: $CVSROOT/IDEA-DEV/COPYRIGHT
00005 
00006 #ifndef PSL_PLANSERVER_FACTORY_HEADER_
00007 #define PSL_PLANSERVER_FACTORY_HEADER_
00008 
00009 #include "Factory.hh"
00010 #include "PslArgumentTypes.hh"
00011 #include "PslConstantTypes.hh"
00012 #include "PslObject.hh"
00013 #include "PslVariable.hh"
00014 #include "TimeBasics.hh"
00015 #include "TokenLocation.hh"
00016 #include "Utilities.hh"
00017 
00018 namespace IDEA
00019 {
00020   class PslArgument;
00021   class PslArgumentImpl;
00022   class PslAttribute;
00023   class PslAttributeImpl;
00024   class PslConstantImpl;
00025   class PslConstraintImpl;
00026   class PslDomain;
00027   class PslDatabase;
00028   class PslDatabaseImpl;
00029   class PslInitialStateLoaderImpl;
00030   class PslLabelImpl;
00031   class PslLabelSetImpl;
00032   class PslModelManager;
00033   class PslModelManagerImpl;
00034   class PslNumericLimitsImpl;
00035   class PslObjectImpl;
00036   class PslObjectClassImpl;
00037   class PslParameterImpl;
00038   class PslPredicateImpl;
00039   class PslTimeConverterImpl;
00040   class PslTimeConstraintImpl;
00041   class PslTimelineImpl;
00042   class PslTokenImpl;
00043   class PslVariable;
00044   class PslVariableImpl;
00045 
00055   class PslModelManagerFactory:
00056     public Factory<PslModelManagerFactory>
00057   {
00058   public:
00062     virtual ~PslModelManagerFactory();
00066     virtual PslLabelSetImpl* createLabelSetImpl( const std::string& name, 
00067                                                  const StringSet& values ) const = 0;
00071     virtual PslObjectClassImpl* createObjectClassImpl( const std::string& objectClassName ) const = 0;
00075     virtual PslTimeConverterImpl* createTimeConverterImpl() const ;
00079     virtual PslInitialStateLoaderImpl* createInitialStateLoaderImpl() const = 0;
00083     virtual PslAttributeImpl* createAttributeImpl( const std::string& name ) const = 0;
00087     virtual PslPredicateImpl* createPredicateImpl( const PslAttribute* attribute, 
00088                                                    const std::string& name ) const = 0;
00089 
00093     virtual PslArgumentImpl* createArgumentImpl( const PslPredicate* predicate, 
00094                                                  const PslDomain* domain, 
00095                                                  int index, 
00096                                                  const PslArgumentType& type, 
00097                                                  const PslSelectorType& mType, 
00098                                                  const std::string& name ) const = 0;
00099 
00103     virtual PslObjectImpl* createObjectImpl( const PslDatabase* database,
00104                                              const PslObjectClass* objectClass,
00105                                              const std::string& name ) const = 0;
00109     virtual PslConstantImpl* createConstantImpl( const std::string& name, 
00110                                                  double value, 
00111                                                  const PslConstantType& type ) const;
00115     virtual PslDatabaseImpl* createDatabaseImpl( const PslModelManager* modelManager, 
00116                                                  const std::string& agentName,
00117                                                  const std::string& name ) const = 0;
00121     virtual PslTimelineImpl* createTimelineImpl( const PslDatabase* database, 
00122                                                  const PslObject* object, 
00123                                                  const PslAttribute* attribute ) const = 0;
00127     virtual PslConstraintImpl* createTimeConstraintImpl( const PslToken* token,
00128                                                          int authority ) const = 0;
00132     virtual PslConstraintImpl* createReturnFlagReceivedConstraintImpl( const PslParameter* parameter,
00133                                                                        int authority ) const = 0;
00137     virtual PslConstraintImpl* createObservedConstraintImpl( const PslParameter* parameter,
00138                                                              int authority ) const = 0;
00142     virtual PslConstraintImpl* createEndTimeConstraintImpl( const PslToken* token,
00143                                                             const Time& time,
00144                                                             int authority ) const = 0;
00148     virtual PslConstraintImpl* createStartTimeConstraintImpl( const PslToken* token,
00149                                                               const Time& time,
00150                                                               int authority ) const = 0;
00154     virtual PslVariableImpl* createVariableImpl( const PslDatabase* database,
00155                                                  const PslDomain* domain,
00156                                                  const std::string& name ) const;
00157 
00161     virtual PslVariableImpl* createObjectVariableImpl( const PslDatabase* database,
00162                                                        const PslObjectSet& objects,
00163                                                        const std::string& name ) const = 0;
00167     virtual PslVariableImpl* createTimelineVariableImpl( const PslDatabase* database,
00168                                                          const std::set< PslTimeline* >& timelines,
00169                                                          const std::string& name ) const = 0;
00173     virtual PslNumericLimitsImpl* createPslNumericLimitsImpl() const = 0;
00177     template< class Type>
00178     PslVariableImpl* createVariableImpl( const PslDatabase* database, 
00179                                          const Type& datum, 
00180                                          const std::string& name ) const
00181     {
00182       PSL_ERROR( PslTypeUnknown );
00183     }
00190     template <class Type>
00191     PslVariableImpl* createFullVariableImpl( const PslDatabase* database, 
00192                                              const std::string& name) const
00193     {
00194       PSL_ERROR( PslTypeUnknown );
00195     }
00201     template <class Type>
00202     PslVariableImpl* createIntervalVariableImpl( const PslDatabase* db, 
00203                                                  const Type& lb, 
00204                                                  const Type& ub, 
00205                                                  const std::string& name) const
00206     {
00207       PSL_ERROR( PslTypeUnknown );
00208     }
00215     template <class Type>
00216     PslVariableImpl* createEnumeratedVariableImpl( const PslDatabase* db, 
00217                                                    const std::set<Type>&, 
00218                                                    const std::string& name ) const
00219     {
00220       PSL_ERROR( PslTypeUnknown );
00221     }
00225     virtual PslModelManagerImpl* createModelManagerImpl() const = 0;
00229     virtual PslParameterImpl* createParameterImpl( const PslToken* token, 
00230                                                    const PslArgument* argument  ) const;
00234     virtual  PslTokenImpl* createTokenImpl( const PslDatabase* database, 
00235                                             const PslTimeline* timeline,
00236                                             const PslPredicate* predicate,
00237                                             const Time& earliestStart,
00238                                             const Time& latestStart,
00239                                             const Time& earliestEnd,
00240                                             const Time& latestEnd,
00241                                             unsigned int externalTokenId, 
00242                                             const TokenLocation& source,
00243                                             const std::string& comRelayName) const = 0;
00244 
00248      virtual PslVariableImpl* createEnumeratedLabelVariableImpl( const PslDatabase* db,
00249                                                                  const std::set<std::string>& values, 
00250                                                                  const std::string& name ) const = 0;
00251   protected:
00255     PslModelManagerFactory( const std::string& name );
00259     virtual PslVariableImpl* createFullIntVariableImpl( const PslDatabase* db,
00260                                                         const std::string& name) const = 0;
00261 
00265     virtual PslVariableImpl* createSingletonIntVariableImpl( const PslDatabase* db,
00266                                                              const int&, 
00267                                                              const std::string& name) const = 0;
00268 
00272     virtual PslVariableImpl* createIntervalIntVariableImpl( const PslDatabase* db, 
00273                                                             int min, 
00274                                                             int max, 
00275                                                             const std::string& name) const = 0;
00276 
00280     virtual PslVariableImpl* createEnumeratedIntVariableImpl( const PslDatabase* db,
00281                                                               const std::set<int> &, 
00282                                                               const std::string& name ) const = 0;
00283 
00287     virtual PslVariableImpl* createFullDoubleVariableImpl( const PslDatabase* db, 
00288                                                            const std::string& name) const = 0;
00289 
00293     virtual PslVariableImpl* createSingletonDoubleVariableImpl( const PslDatabase* db, 
00294                                                                 const double &, 
00295                                                                 const std::string& name) const = 0;
00296 
00300     virtual PslVariableImpl* createIntervalDoubleVariableImpl( const PslDatabase* db, 
00301                                                                double min, 
00302                                                                double max, 
00303                                                                const std::string& name) const = 0;
00304 
00308     virtual PslVariableImpl* createEnumeratedDoubleVariableImpl( const PslDatabase* db,
00309                                                                  const std::set<double>&, 
00310                                                                  const std::string& name ) const = 0;
00311 
00312 
00316     virtual PslVariableImpl* createFullBoolVariableImpl( const PslDatabase* db,
00317                                                          const std::string& name) const = 0;
00318 
00322     virtual PslVariableImpl* createSingletonBoolVariableImpl( const PslDatabase* db,
00323                                                               const bool & datum, 
00324                                                               const std::string& name) const = 0;
00325 
00329     virtual PslVariableImpl* createEnumeratedObjectVariableImpl( const PslDatabase* db,
00330                                                                  const std::set<PslObject>&, 
00331                                                                  const std::string& name) const = 0;
00332 
00333   };
00334 
00335   // Template specializations 
00336   template<>
00337   PslVariableImpl* PslModelManagerFactory::createVariableImpl<int>( const PslDatabase* db,
00338                                                                     const int& datum, 
00339                                                                     const std::string& name ) const;
00340   
00341   template<>
00342   PslVariableImpl* PslModelManagerFactory::createEnumeratedVariableImpl<int>( const PslDatabase* db,
00343                                                                               const std::set<int> & theSet, 
00344                                                                               const std::string& name) const;
00345   
00346   template<>
00347   PslVariableImpl* PslModelManagerFactory::createFullVariableImpl<int>( const PslDatabase* db,
00348                                                                         const std::string& name) const;
00349   
00350   template<>
00351   PslVariableImpl* PslModelManagerFactory::createIntervalVariableImpl<int>( const PslDatabase* db, 
00352                                                                             const int& min, 
00353                                                                             const int& max, 
00354                                                                             const std::string& name) const;
00355 
00356   template<>
00357   PslVariableImpl* PslModelManagerFactory::createVariableImpl<double>( const PslDatabase* db,
00358                                                                        const double& datum, 
00359                                                                        const std::string& name ) const;
00360   
00361   template<>
00362   PslVariableImpl* PslModelManagerFactory::createEnumeratedVariableImpl<double>( const PslDatabase* db,
00363                                                                                  const std::set<double> & theSet, 
00364                                                                                  const std::string& name) const;
00365   
00366   template<>
00367   PslVariableImpl* PslModelManagerFactory::createFullVariableImpl<double>( const PslDatabase* db,
00368                                                                            const std::string& name) const;
00369   
00370   template<>
00371   PslVariableImpl* PslModelManagerFactory::createIntervalVariableImpl<double>( const PslDatabase* db, 
00372                                                                                const double& min, 
00373                                                                                const double& max, 
00374                                                                                const std::string& name) const;
00375 
00376   template<>
00377   PslVariableImpl* PslModelManagerFactory::createVariableImpl<bool>( const PslDatabase* db,
00378                                                                      const bool& datum, 
00379                                                                      const std::string& name ) const;
00380   
00381   template<>
00382   PslVariableImpl* PslModelManagerFactory::createFullVariableImpl<bool>( const PslDatabase* db,
00383                                                                          const std::string& name) const;
00384   
00385 }
00386 
00387 #endif // PSL_PLANSERVER_FACTORY_HEADER_

Contact information
© IDEA
Generated on Fri Feb 3 17:09:41 2006 for IDEA.