Main Page | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages | Examples

IOPoint.h

00001 #ifndef _RDA_IO_POINT_H_
00002 #define _RDA_IO_POINT_H_
00003 //
00004 // 21 Mar 2001, N.Trofimov
00005 // 05 Dec 2002 NNT for RDA-2.0
00006 //    - no class name
00007 // 10 Apr 2003 NNT
00008 //    - changes in doc comments
00009 // 17 Jul 2006, W.Gajewski
00010 //    - string management adjusted
00011 //
00012 
00013 #include <string.h>
00014 #include <stdlib.h>
00015 
00032 //
00033 // TODO: "release" flag and a version that holds pointers to the strings
00034 //        (a special constructor) to avoid memory allocation in device calls
00035 //
00036   
00037 class rdaIOPoint
00038 {
00039    char* dn;
00040    char* pn;
00041    char* cs;
00042    
00043    public:
00044    
00045       //
00046       // Constructors
00047       //
00048       rdaIOPoint(const char* deviceName,
00049                  const char* propertyName, 
00050                  const char* cycleSelector = 0)
00051       : 
00052          cs(0)
00053       {
00054          dn = strdup(deviceName);
00055          pn = strdup(propertyName);
00056          if (cycleSelector != 0) cs = strdup(cycleSelector);
00057       }
00058 
00059       rdaIOPoint(const rdaIOPoint& iop)
00060       {
00061          dn = strdup(iop.dn);
00062          pn = strdup(iop.pn);
00063          if (iop.cs != 0) cs = strdup(iop.cs);
00064          else cs = 0;
00065       }
00066 
00067       //
00068       // Destructor
00069       //      
00070       virtual ~rdaIOPoint()
00071       {
00072          free( dn );
00073          free( pn );
00074          if (cs != 0) free( cs );
00075       }
00076 
00077       //
00078       // Asignment and comparison
00079       //
00080       rdaIOPoint& operator=(const rdaIOPoint& iop)
00081       {
00082          if (this != &iop)
00083          {
00084             free( dn );
00085             free( pn );
00086             if (cs != 0) free( cs );
00087             dn = strdup(iop.dn);
00088             pn = strdup(iop.pn);
00089             if (iop.cs != 0) cs = strdup(iop.cs);
00090             else cs = 0;
00091          }
00092          return *this;
00093       }
00094       
00095       bool operator==(const rdaIOPoint& iop) const
00096       {
00097          if (strcmp(dn, iop.dn)) return false;
00098          if (strcmp(pn, iop.pn)) return false;
00099          if (cs == 0 || iop.cs == 0)
00100             { 
00101             if (cs != iop.cs) return false;
00102             }
00103          else if (strcmp(cs, iop.cs)) return false;
00104          return true;           
00105       }
00106       
00107       bool operator!=(const rdaIOPoint& iop) const
00108       {
00109          return !(*this == iop);
00110       }      
00111 
00112       //
00113       // Accessors
00114       //
00118       const char* getDeviceName()    const { return dn; }
00119 
00123       const char* getPropertyName()  const { return pn; }
00124 
00128       const char* getCycleSelector() const { return cs; }
00129 
00130 };
00131 
00132 #endif

RDA-2.3 documentation - 27 Jun 2007 - N.Trofimov