• Classes
  • Modules
  • Namespaces
  • Files
  • Related Pages
  • File List
  • File Members

baciPcommonImpl_T.h

Go to the documentation of this file.
00001 #ifndef _baciPcommonImpl_T_H_
00002 #define _baciPcommonImpl_T_H_
00003 /*******************************************************************
00004 * ALMA - Atacama Large Millimiter Array
00005 * (c) European Southern Observatory, 2003 
00006 *
00007 *This library is free software; you can redistribute it and/or
00008 *modify it under the terms of the GNU Lesser General Public
00009 *License as published by the Free Software Foundation; either
00010 *version 2.1 of the License, or (at your option) any later version.
00011 *
00012 *This library is distributed in the hope that it will be useful,
00013 *but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015 *Lesser General Public License for more details.
00016 *
00017 *You should have received a copy of the GNU Lesser General Public
00018 *License along with this library; if not, write to the Free Software
00019 *Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
00020 *
00021 * "@(#) $Id: baciPcommonImpl_T"
00022 *
00023 * who       when        what
00024 * --------  ----------  ----------------------------------------------
00025 * bjeram    07/02/2003  created
00026 */
00027 
00037 #ifndef __cplusplus
00038 #error This is a C++ include file and cannot be used from plain C
00039 #endif
00040 
00041 #include "baciDB.h"
00042 #include <acsutil.h>
00043 #include <baci.h>
00044 #include <baciS.h>
00045 #include <baciCORBA.h>
00046 #include <baciCORBAMem.h>
00047 #include <baciEvent.h>
00048 #include <baciDevIOMem.h>
00049 #include <baciCharacteristicModelImpl.h>
00050 #include <ACSErrTypeCommon.h>
00051 #include <ACSErrTypeDevIO.h>
00052 #include <baciErrTypeProperty.h>
00053 #include <baciErrTypeDevIO.h>
00054 
00060 #define HISTORY_SIZE 32
00061 
00064 
00068 #define ACS_P_T(T, TC) TC, ACS::CB##T, ACS::T##Seq, ACS::T##Seq_out, ACS::Monitor##T, baci::Monitor##T,TC, TC, TC
00069 //, POA_ACS::RW##T 
00070 
00071 //#define ACS_P_TL(X) X T, X TCB, X TSeq, X TSeq_out, X TMonitor, X TMonitorImpl, X POA_SK, X TBACIValue 
00072 
00076 #define ACS_P_TL T, TCB, TSeq, TSeq_out, TMonitor, TMonitorImpl, TM, TS, TSM, POA_SK
00077 
00081 #define ACS_P_C class T, class TCB, class TSeq, class TSeq_out, class TMonitor, class TMonitorImpl, class TM, class TS, class TSM, class POA_SK
00082 
00083 
00084 namespace baci {
00085 
00086 
00093 class CheckDevIOValue
00094 {
00095 public:
00096         CheckDevIOValue(const ACE_CString& n){ propName_m = n;}
00097 
00098         template <class T>
00099         void checkValue(T value);
00100 private:
00101         ACE_CString propName_m;
00102 };
00103 
00107 template <class T>
00108 class CDBconverter
00109 {
00110   public:
00111     static void convertValue(const char *str, T& v)
00112         {
00113             std::istringstream is(str);
00114             (istream&) is >> v;
00115             if (!is)
00116                 throw cdbErrType::WrongCDBDataTypeExImpl(__FILE__, __LINE__, "CDBconverter::converterValue");
00117         }
00118 };
00119 
00120 template<>
00121 class CDBconverter<ACE_CString>
00122 {
00123   public:
00124     static void convertValue(const char *s, ACE_CString& v)
00125         {
00126             v = (const char*)s;
00127         }
00128 };
00129 
00130 template<>
00131 class CDBconverter<CORBA::Boolean>
00132 {
00133   public:
00134     static void convertValue(const char *str, CORBA::Boolean& v)
00135         {
00136             std::istringstream is(str);
00137             (istream&) is >> v;
00138             if (!is) {
00139                         std::istringstream is2(str);
00140                         (istream&) is2 >> std::boolalpha >> v;
00141                         if(!is2)
00142                                 throw cdbErrType::WrongCDBDataTypeExImpl(__FILE__, __LINE__, "CDBconverter::converterValue");
00143                 }
00144 
00145         }
00146 };
00147 
00153 template<ACS_P_C>
00154 class baci_EXPORT PcommonImpl:  public virtual POA_SK,  
00155                                 public CharacteristicModelImpl,
00156                                 public PropertyImplementator,
00157                                 public ActionImplementator
00158 {
00159 
00160 
00161 public:
00167     PcommonImpl(const ACE_CString& name, BACIComponent *component_p, DevIO<TM> *devIO, bool flagdeldevIO);
00168 
00172   virtual ~PcommonImpl();
00173 
00174   /*
00175    * Property construction status method
00176    * After contruction of a property, this method will be called
00177    * to check if construction was successful; if not, monitor will be destroyed by parent
00178    * @return 0 on success or any other value (value can indicate cause of faulire) on faulure
00179    */
00180   virtual int initialization() { return initialization_m; }
00181 
00186   CORBA::Object_ptr getCORBAReference() const { return reference_mp;  }
00187 
00191   BACIProperty* getProperty() const { return property_mp; }
00192 
00193   virtual void publishNow();
00194 
00201    virtual void destroy();
00202 
00206     DevIO<TM>* getDevIO() const { return devIO_mp; }
00207     
00208   /***
00209    * Implementations of async. get_value method
00210    */
00211     virtual ActionRequest getValueAction(BACIComponent* component_p, 
00212                                          int callbackID,
00213                                          const CBDescIn& descIn, 
00214                                          BACIValue* value,
00215                                          Completion& completion, 
00216                                          CBDescOut& descOut);
00217 
00218 
00219   /* --------------- [ Action implementator interface ] -------------- */
00220 
00238   virtual ActionRequest invokeAction(int function,
00239                                      BACIComponent* component_p, 
00240                                      const int &callbackID, 
00241                                      const CBDescIn& descIn, 
00242                                      BACIValue* value, 
00243                                      Completion& completion, 
00244                                      CBDescOut& descOut);
00245 
00246   /* -------------- [ Property implementator interface ] -------------- */
00247 
00255   virtual void getValue(BACIProperty* property,
00256                         BACIValue* value, 
00257                         Completion &completion,
00258                         CBDescOut& descOut);
00259 
00260   /* ----------------------------------------------------------------- */
00261   /* ---------------------- [ CORBA interface ] ---------------------- */
00262   /* ----------------------------------------------------------------- */
00263   
00264   /* --------------------- [ Property interface ] --------------------- */
00265     
00266     virtual char * name ();
00267     
00268     virtual char * characteristic_component_name ();
00269 
00270     /*
00271       already defined bt CharacteristicModelImpl
00272     virtual CosPropertyService::PropertySet_ptr get_all_characteristics ()
00273     */
00274     
00275     /* ----------------- [ TypelessProperty interface ] ----------------- */
00276     
00277     virtual CORBA::Boolean initialize_devio ();
00278     
00279     virtual char * description ();
00280     
00281     virtual char * format ();
00282     
00283     virtual char * units ();
00284     
00285     virtual ACS::pattern resolution ();
00286     
00287     virtual void publish_now();
00288 
00289     /* -------------------- [ P interface ] -------------------- */
00290     
00291     virtual ACS::TimeInterval default_timer_trigger ();
00292     
00293     virtual ACS::TimeInterval min_timer_trigger ();
00294     
00295     virtual TS default_value ();
00296     
00297     virtual T get_sync (ACSErr::Completion_out c);
00298     
00299     virtual void get_async (TCB *cb,
00300                             const ACS::CBDescIn & desc);
00301     
00302     virtual CORBA::Long get_history (CORBA::Long n_last_values,
00303                                      TSeq_out vs,
00304                                      ACS::TimeSeq_out ts);
00305         
00306     virtual TMonitor* create_monitor (TCB*cb,
00307                                       const ACS::CBDescIn & desc);
00308         
00309     virtual TMonitor* create_postponed_monitor (ACS::Time start_time,
00310                                                 TCB *cb,
00311                                                 const ACS::CBDescIn & desc);
00312   
00313   protected:
00314     
00320     virtual bool readCharacteristics();
00321   
00322     /* --------------------- [ History support ] ---------------------- */
00323     
00324     void addValueToHistory(ACS::Time time, TM &value);
00325     
00326 
00328     CheckDevIOValue checkDevIOValue_m;
00329 
00331     BACIProperty* property_mp;
00332     
00333     DevIO<TM> *devIO_mp;  
00334     bool deldevIO_m;
00335     TM value_m;
00336     
00338     int initialization_m;
00339     
00352     typedef ActionRequest (PcommonImpl<ACS_P_TL>::*ActionFunction)(BACIComponent* component_p, 
00353                                                                    int callbackID,
00354                                                                    const CBDescIn& descIn, 
00355                                                                    BACIValue* value,
00356                                                                    ACSErr::Completion& completion, 
00357                                                                    CBDescOut& descOut);  
00360 
00361   bool destroyed_m;
00362 
00364   CORBA::Object_ptr reference_mp;
00365 
00367   TM historyValue_m[HISTORY_SIZE];
00368 
00370   ACS::Time historyTime_m[HISTORY_SIZE];
00371 
00373   int historyStart_m;
00374 
00376   bool historyTurnaround_m;
00377 
00381  
00382   bool initializeDevIO_m; 
00383   // Typeless property
00384   ACE_CString  description_m;                   
00385   ACE_CString  format_m;                                
00386   ACE_CString  units_m;                                 
00387   ACS::pattern resolution_m;                    
00388 
00389   // P  
00390   TSM   defaultValue_m;                         
00391   ACS::TimeInterval  defaultTimerTrig_m;                
00392   ACS::TimeInterval  minTimerTrig_m;
00393 
00394   private:
00398     void operator=(const PcommonImpl&);
00399 
00403     PcommonImpl(const PcommonImpl&);
00404 };
00405 
00406 //#include "baciPcommonImpl_T.i"
00407 
00408  }; 
00409 
00410 #endif
00411 
00412 
00413 
00414 
00415 
00416 
00417 
00418 
00419 
00420 
00421 
00422 
00423 
00424 
00425 
00426 
00427 
00428 
00429 
00430 
00431 
00432 
00433 

Generated on Fri Oct 23 2015 09:48:27 for ACS-2015.8 C++ API by  doxygen 1.7.0