summaryrefslogtreecommitdiffstats
path: root/raslib/primitivetype.hh
blob: 9dac808e6dbe70684c148fa3c5873c8ac5a200e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*
* This file is part of rasdaman community.
*
* Rasdaman community is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Rasdaman community is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with rasdaman community.  If not, see <http://www.gnu.org/licenses/>.
*
* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
rasdaman GmbH.
*
* For more information please see <http://www.rasdaman.org>
* or contact Peter Baumann via <baumann@rasdaman.com>.
/
/**
 * INCLUDE: primitivetype.hh
 *
 * MODULE:  raslib
 * CLASS:   r_Primitive_Type
 *
 * COMMENTS:
 *
*/

#ifndef _D_PRIMITIVE_TYPE_
#define _D_PRIMITIVE_TYPE_

class r_Error;

#include "raslib/basetype.hh"
#include "raslib/odmgtypes.hh"

//@ManMemo: Module: {\bf raslib}

/*@Doc:
  This class represents all primitive types in the ODMG conformant
  representation of the RasDaMan type system. Examples are ULONG or
  BOOL.
*/
 
class r_Primitive_Type : public r_Base_Type
{
public:
  /// constructor getting name of type, size of type and type id.
  r_Primitive_Type( const char* newTypeName, const r_Type::r_Type_Id newTypeId );
  /// copy constructor
  r_Primitive_Type( const r_Primitive_Type& oldObj );
  /// assignment operator.
  const r_Primitive_Type& operator=( const r_Primitive_Type& oldObj );
  /// destructor.
  virtual ~r_Primitive_Type();

  /// clone operation
  virtual r_Type* clone() const;

  /// retrieve id of the type.
  virtual r_Type::r_Type_Id type_id() const;

  /// converts array of cells from NT byte order to Unix byte order.
  virtual void convertToLittleEndian(char* cells, r_Area noCells) const;

  /// converts array of cells from Unix byte order to NT byte order.
  virtual void convertToBigEndian(char* cells, r_Area noCells) const;

  /// writes state of object to specified stream
  virtual void print_status( std::ostream& s = std::cout ) const;  
  
  /// check, if type is primitive.
  virtual bool isPrimitiveType() const;

  /// prints value of a primitive type
  virtual void print_value( const char* storage,  std::ostream& s = std::cout  ) const;

    //@Man: Type-safe value access methods. In case of type mismatch, an exception is raised.
    //@{
    ///

      /// 
      r_Double get_value( const char* cell ) const throw( r_Error );
      /// 
      void  set_value( char* cell, r_Double ) throw( r_Error );      
      ///
      void  get_limits( r_Double&,  r_Double& ) throw( r_Error );            
      

      /// 
      r_Boolean get_boolean( const char* cell ) const throw( r_Error );
      /// 
      r_Char    get_char( const char* cell )    const throw( r_Error );
      ///  
      r_Octet   get_octet( const char* cell )   const throw( r_Error );
      /// 
      r_Short   get_short( const char* cell )   const throw( r_Error );
      /// 
      r_UShort  get_ushort( const char* cell )  const throw( r_Error );
      /// 
      r_Long    get_long( const char* cell )    const throw( r_Error );
      /// 
      r_ULong   get_ulong( const char* cell )   const throw( r_Error );
      /// 
      r_Float   get_float( const char* cell )   const throw( r_Error );
      /// 
      r_Double  get_double( const char* cell )  const throw( r_Error );

      /// 
      void  set_boolean( char* cell, r_Boolean ) throw( r_Error );
      /// 
      void  set_char( char* cell, r_Char )       throw( r_Error );
      ///  
      void  set_octet( char* cell, r_Octet )     throw( r_Error );
      /// 
      void  set_short( char* cell, r_Short )     throw( r_Error );
      /// 
      void  set_ushort( char* cell, r_UShort )   throw( r_Error );
      /// 
      void  set_long( char* cell, r_Long )       throw( r_Error );
      /// 
      void  set_ulong( char* cell, r_ULong )     throw( r_Error );
      /// 
      void  set_float( char* cell, r_Float )     throw( r_Error );
      /// 
      void  set_double( char* cell, r_Double )   throw( r_Error );
            

    ///
    //@}

  protected:
  /// default constructor.
  r_Primitive_Type();

    r_Type::r_Type_Id typeId;
};

//@Doc: write the status of a primitive type to a stream
extern std::ostream &operator<<( std::ostream &str, const r_Primitive_Type &type );

#endif