summaryrefslogtreecommitdiffstats
path: root/raslib/attribute.hh
blob: 1bfed1c8016cca1cf102742310b5e82cb87a9a2f (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
/*
* 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: attribute.hh
 *
 * MODULE:  raslib
 * CLASS:   r_Attribute
 *
 * COMMENTS:
 *		None
*/

#ifndef _D_ATTRIBUTE_
#define _D_ATTRIBUTE_

#include "raslib/property.hh"
#include "raslib/odmgtypes.hh"
#include "raslib/mddtypes.hh"

class r_Base_Type;
class r_Type_Id;
class r_Error;


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

/*@Doc:
  This class represents attributes of structs in the ODMG 
  conformant representation of the RasDaMan type system.
*/
 

class r_Attribute : public r_Property
	{
	public:
		/// default constructor.
		/// initialise important attributes to NULL
		r_Attribute();

		/// constructor getting name and type of attribute.
		r_Attribute(const char* newTypeName, const r_Base_Type& newType);

		/// copy constructor.
		r_Attribute(const r_Attribute& oldObj);

		/// assignment operator.
		const r_Attribute& operator=(const r_Attribute& oldObj);

		/// destructor.
		virtual ~r_Attribute();

		/// retrieve (local) offset
		r_Bytes offset() const;

		/// set (local) offset
		void set_offset(r_Bytes newOffset);

		/// retrieve global offset
		r_Bytes global_offset() const;

		/// set global offset
		void set_global_offset(r_Bytes newOffset);

		/// writes state of object to specified stream
		virtual void print_status(std::ostream& s = std::cout) const;  

		/// subscript operator to access attributes of a structured attribute
		/// throws error when type is not a struct type
		r_Attribute operator[](unsigned int number) const throw(r_Error);

		//@Man: Type-safe value access methods. In case of type mismatch, an exception is raised.
		//@{
		/// 
		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);

		///
		//@}

	protected:
		/// local offset
		r_Bytes localOffset;

		/// global offset
		r_Bytes globalOffset;
	};

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

#endif