summaryrefslogtreecommitdiffstats
path: root/qlparser/qtdata.hh
blob: ee2e2852e4829df2e3208b0c22fa833c8b8865f0 (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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#ifndef _QTDATA_
#define _QTDATA_

#include <iostream>

#include "qlparser/parseinfo.hh"
#include "raslib/rminit.hh"

#ifndef CPPSTDLIB
#include <ospace/string.h> // STL<ToolKit>
#else
#include <string>
#endif

/*
* 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>.
*/
/*************************************************************
 *
 *
 * COMMENTS:
 *
 ************************************************************/

//@Man: TypeEnum
//@Type: typedef
//@Memo: Module: {\bf qlparser}.

enum QtDataType
{
      QT_TYPE_UNKNOWN,
      QT_BOOL,
      QT_CHAR,
      QT_OCTET,
      QT_USHORT,
      QT_SHORT,
      QT_ULONG,
      QT_LONG,
      QT_FLOAT,
      QT_DOUBLE,
      QT_COMPLEXTYPE1,	// with float members
      QT_COMPLEXTYPE2,	// with double 
      QT_MDD,
      QT_COMPLEX,
      QT_STRING,
      QT_INTERVAL,
      QT_MINTERVAL,
      QT_POINT
};




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

/*@Doc:

This class is superclass for the classes representing a
specific data type handled by the query tree.

*/

class QtData
{
  public:
    // construktor
    QtData();

    // constructor
    QtData( const std::string name );

    /// copy constructor
    QtData( const QtData &obj );

    /// destructor
    virtual ~QtData();

    /// assignement operator
    const QtData& operator=( const QtData& obj );

    enum QtLifetime
    {
      QT_PERSISTENT,
      QT_TRANSIENT
    };

    /// returns type of data represented by the QtData object
    virtual QtDataType getDataType() const = 0;
    /**
      \begin{tabular}{lll}
      QtMDD&&QT_MDD\\
      QtAtomicData&&QT_BOOL\\
      &&QT_CHAR\\
      &&QT_OCTET\\
      &&QT_USHORT\\
      &&QT_SHORT\\
      &&QT_ULONG\\
      &&QT_FLOAT\\
      &&QT_DOUBLE\\
      QtComplexData&&QT_COMPLEX\\
      QtString&&QT_STRING\\
      QtInterval&&QT_INTERVAL\\
      QtMinterval&&QT_MINTERVAL\\
      QtPoint&&QT_POINT\\
      \end{tabular}      
    */

    /// returns a null-terminated string describing the type structure
    virtual char* getTypeStructure() const = 0;
    /**
      The string pointer has to be free using free() by the caller.
    */

    /// determines, if the data is of type scalar
    virtual bool isScalarData() const;

    /// compares data content
    virtual bool equal( const QtData* obj ) const = 0;

    /// returns content dependent string representation 
    virtual std::string getSpelling() const = 0;

    //@Man: Read/Write methods:
    //@{
    ///

      /// get the iterator name
      inline std::string const getIteratorName() const;
      ///
      inline void setIteratorName( const std::string & iteratorNameNew );
      ///
      inline QtLifetime const getLifetime() const;
      ///
      inline void setLifetime( QtLifetime flag );
      /// return number of references to the self object
      inline unsigned int getRefNo() const;
      /// increases the reference counter by one
      inline void incRef();
      /// deletes one reference and the object if it was the last one
      inline int  deleteRef();
      /**
         In case the object is deleted, 1 is returned, 0 otherwise.
      */

      ///
      inline ParseInfo getParseInfo();
      ///
      inline void      setParseInfo( const ParseInfo &info );

    ///
    //@}

    /// print status of the object to the specified stream
    virtual void printStatus( std::ostream& stream = std::cout ) const;

  protected:
    /// pointer to an optional parser info
    ParseInfo* parseInfo;

  private:
    /// decreases the reference counter by one and returns the new value
    inline unsigned int decRef();

    /// attribute storing the iterator name
    std::string iteratorName;

    /// attribute storing the lifetime (persistent, transient)
    QtLifetime persistent;
    /**
      Objects of subclasses of QtScalarData (QtAtomicData and QtComplexdata) are always transient.
      Objects of subclass QtMDD are persistent or transient.
    */

    /// counts the number of references to the data object
    unsigned int referenceCounter;
};

#include "qlparser/qtdata.icc"

#endif