Main Page   Modules   Class Hierarchy   Compound List   File List   Compound Members  

UnitInfo.H

00001 #ifndef UnitInfo_H
00002 #define UnitInfo_H
00003 
00004 #include <stdio.h>
00005 
00006 #include "Dimension.H"
00007 #include "DimensionGroup.H"
00008 #include "Prefix.H"
00009 #include "Unit.H"
00010 
00012 class UnitInfo {
00013 public:
00014   virtual ~UnitInfo() { } ;
00015   virtual int type() const = 0 ;
00016   virtual UnitInfo* copy() const = 0 ;
00017   virtual void print(FILE* f) const = 0 ;
00018   enum {
00019     UNIT=1,
00020     OPER=2
00021   } ;
00022 } ;
00023 
00025 class UnitUnitInfo : public UnitInfo {
00026 protected:
00027   Unit*         m_u ;
00028   Prefix*       m_p ;
00029   int           m_x ;
00030   friend class Quantity ;
00031 public:
00032   UnitUnitInfo( Unit* u, Prefix* p, int x )
00033   { m_p = p ;
00034     m_x = x ;
00035     if ( u )
00036       m_u = u ;
00037     else
00038       m_u = Unit::find("none") ; 
00039   } ;
00040   virtual ~UnitUnitInfo() { }
00041 
00042   Unit*         unit()          { return m_u ; } ;
00043   Prefix*       prefix()        { return m_p ; } ;
00044   int           exp()   const   { return m_x ; } ;
00045   void          exp(int x)      { m_x = x ; } ;
00046 
00047   virtual UnitInfo* copy() const { return new UnitUnitInfo( m_u, m_p, m_x ) ; }
00048   virtual int   type() const { return UNIT ; } ;
00049   virtual void  print(FILE* f) const 
00050   { 
00051     if (!m_x) return ;
00052     if (m_p) fprintf( f, "%s", m_p->abbr() ) ; 
00053     fprintf( f, "%s", m_u->abbr() ) ;
00054     if (m_x != 1) fprintf( f, "^%d", m_x ) ;
00055   } ;
00056 } ;
00057 
00059 class UnitOperInfo : public UnitInfo {
00060 protected:
00061   char          m_op ;
00062   friend class Quantity ;
00063 public:
00064   UnitOperInfo( char op )
00065     : m_op(op) { } ;
00066   virtual ~UnitOperInfo() { }
00067 
00068   char op() const { return m_op ; } ;
00069 
00070   virtual UnitInfo* copy() const { return new UnitOperInfo( m_op ) ; }
00071   virtual int type() const { return OPER ; } ;
00072   virtual void  print(FILE* f) const 
00073   { fprintf( f, "%c", m_op ) ; } ;
00074 } ;
00075 
00076 
00077 
00078 #endif // UnitInfo_H
Citrus C++ Reference Manual  20010520