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
|