rasdaman complete source
qtnode.hh
Go to the documentation of this file.
1 #ifndef _QTNODE_
2 #define _QTNODE_
3 
4 #include "config.h"
5 
6 #ifndef CPPSTDLIB
7 #include <vector.h> // STL<ToolKit>
8 #include <list.h> // STL<ToolKit>
9 #include <ospace/string.h> // STL<ToolKit>
10 #else
11 #include <vector>
12 #include <list>
13 #include <string>
14 #endif
15 
16 #include "raslib/rmdebug.hh"
17 #include "raslib/sinterval.hh"
18 #include "qlparser/parseinfo.hh"
19 #include "qlparser/qtdata.hh"
20 
21 // define used in lots of qlparser files to indent output
22 #ifdef CPPSTDLIB
23 #define SPACE_STR(numSpace) std::string(numSpace,' ')
24 #else
25 #define SPACE_STR(numSpace) std::string(' ',numSpace)
26 #endif
27 
28 class QtOperation; // forward declarations of subclasses of QtNode
29 class Type;
30 class QtTypeElement;
31 
32 /*
33 * This file is part of rasdaman community.
34 *
35 * Rasdaman community is free software: you can redistribute it and/or modify
36 * it under the terms of the GNU General Public License as published by
37 * the Free Software Foundation, either version 3 of the License, or
38 * (at your option) any later version.
39 *
40 * Rasdaman community is distributed in the hope that it will be useful,
41 * but WITHOUT ANY WARRANTY; without even the implied warranty of
42 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
43 * GNU General Public License for more details.
44 *
45 * You should have received a copy of the GNU General Public License
46 * along with rasdaman community. If not, see <http://www.gnu.org/licenses/>.
47 *
48 * Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
49 rasdaman GmbH.
50 *
51 * For more information please see <http://www.rasdaman.org>
52 * or contact Peter Baumann via <baumann@rasdaman.com>.
53 */
54 /*************************************************************
55  *
56  *
57  * COMMENTS:
58  *
59  ************************************************************/
60 
61 
62 //@ManMemo: Module: {\bf qlparser}
63 
73 class QtNode
74 {
75 public:
77  typedef std::vector<QtData*> QtDataList;
78 
81  {
85  };
86 
88  typedef std::vector<QtTrimElement*> QtTrimList;
89 
91  typedef std::list<QtNode*> QtNodeList;
92 
94  {
118 // added by CStancuMara
131 
132 //**************
139 //**************
140 
164  //QT_MINTERVAL_SELECT,
176  };
177 
178 
179 
181  {
184  };
185 
187  {
191  };
192 
194  typedef std::vector<QtOperation*> QtOperationList;
195 
197  QtNode();
198 
200  QtNode( QtNode* node );
201 
203  virtual ~QtNode();
204 
206  bool subtype( enum QtNodeType a, enum QtNodeType b );
207 
209  virtual QtNodeList* getChilds( QtChildType flag );
220  QtNodeList* getChild( const QtNodeType node, QtChildType flag = QT_DIRECT_CHILDS );
227  virtual bool equalMeaning( QtNode* node );
229 
236  virtual std::string getSpelling();
238 
244  virtual QtAreaType getAreaType();
251  virtual void simplify();
257  virtual void printTree( int tab, std::ostream& s = std::cout, QtChildType mode = QT_ALL_NODES )=0;
259 
261  virtual void printAlgebraicExpression( std::ostream& s = std::cout )=0;
262 
263  //@Man: Read/Write methods
265 
268  inline virtual void setInput( QtOperation* inputOld, QtOperation* inputNew);
270  inline QtNode* getParent() const;
272  inline void setParent( QtNode* node );
274  inline const ParseInfo& getParseInfo();
276  inline void setParseInfo( const ParseInfo &info );
277 
279 
280 
282  inline virtual const QtNodeType getNodeType() const;
287  //virtual void preOptimize(){};
304 
306  static const int QtNodes;
307 
309  static const QtNodeType QtRoot;
310 
312  static const QtNodeType QtInheritance[][2];
313 
314 
315 protected:
318 
320  void startTimer(const char* name);
322  void stopTimer();
324  void pauseTimer();
326  void resumeTimer();
327 
329  std::string getEvaluationTime();
330 
331 #ifdef RMANBENCHMARK
332  RMTimer *evaluationTimer;
333 #endif
334 
335 private:
337  QtNode* parent;
338 
340  static const QtNodeType nodeType;
341 
343  struct QtNodePair
344  {
345  enum QtNodeType base, deriv;
346  };
347 
348 
350  friend bool operator<( const QtNodePair a, const QtNodePair b);
351 
353  static int child_range[];
354 
356  void set_child_range(const QtNodePair *arr);
357 
359  static int minim[], maxim[];
360 
362  static bool MinMaxDone;
363 
365  void SetMinMax();
366 
368  void num_node (const QtNodePair *arr, enum QtNodeType x);
369 
370 #ifdef RMANBENCHMARK
371  static long timerCounter;
372 #endif
373 };
374 
375 
376 
377 
378 //@ManMemo: Module: {\bf qlparser}
379 
395 {
396 public:
398  QtTypeElement();
399 
401  QtTypeElement( const QtDataType initDataType, const char* initName = NULL );
402 
404  QtTypeElement( const Type* initType, const char* initName = NULL );
405 
407  QtTypeElement( const QtTypeElement& typeElement );
408 
410  ~QtTypeElement();
411 
413  const QtTypeElement& operator= ( const QtTypeElement& );
414 
415  //@Man: Read/Write methods
417  void setDataType( const QtDataType newDataType );
421  void setType( const Type* newType );
423  inline void setName( const char* newName );
425  inline const QtDataType getDataType() const;
427  inline const Type* getType() const;
429  inline const char* getName() const;
431  inline bool isBaseType() const;
433  inline bool isInteger() const;
435 
436 
439  void printStatus( std::ostream& s = std::cout ) const;
440 
441 private:
443  QtDataType dataType;
444 
446  const Type* type;
447 
449  char* name;
450 };
451 
452 
453 
454 //@ManMemo: Module: {\bf qlparser}
455 
464 {
465 public:
467  QtTypeTuple( unsigned int length = 0 );
468 
470  void concat( const QtTypeTuple& typeTuple );
471 
473  void concat( const QtTypeElement& typeElement );
474 
476  std::vector<QtTypeElement> tuple;
477 
479  void printStatus( std::ostream& s = std::cout ) const;
480 };
481 
482 #include "qlparser/qtnode.icc"
483 
484 #endif
485 
486 
487 
488 
489 
490 
491 
492 
493 
494 
QtNode()
default constructor
Definition: qtnode.hh:98
bool subtype(enum QtNodeType a, enum QtNodeType b)
returns weather class b is a subtype of class a
Definition: qtnode.hh:150
std::list< QtNode * > QtNodeList
list of QtNode pointers
Definition: qtnode.hh:91
void concat(const QtTypeTuple &typeTuple)
concatenate type tuple
Definition: qtnode.hh:159
std::vector< QtData * > QtDataList
list of QtData pointers
Definition: qtnode.hh:77
std::vector< QtTrimElement * > QtTrimList
list of QtTrimData structures
Definition: qtnode.hh:88
static const QtNodeType QtRoot
the root of the inheritance tree
Definition: qtnode.hh:309
Definition: qtnode.hh:168
QtAreaType
Definition: qtnode.hh:180
Definition: qtnode.hh:110
Definition: qtnode.hh:463
Definition: qtnode.hh:160
Definition: sinterval.hh:233
r_Sinterval interval
Definition: qtnode.hh:83
void setParent(QtNode *node)
Definition: qtnode.hh:100
Definition: qtnode.hh:103
Definition: qtnode.hh:141
Definition: qtnode.hh:153
Definition: qtnode.hh:133
virtual const QtNodeType getNodeType() const
methods for identification of nodes
Definition: qtnode.hh:161
void setName(const char *newName)
Definition: qtnode.hh:102
void resumeTimer()
resume
Definition: qtnode.hh:189
Definition: qtnode.hh:167
void setDataType(const QtDataType newDataType)
virtual void simplify()
simplifies the tree
std::vector< QtTypeElement > tuple
Definition: qtnode.hh:476
QtNodeList * getChild(const QtNodeType node, QtChildType flag=QT_DIRECT_CHILDS)
return childs of a certain class
Definition: qtnode.hh:158
Definition: parseinfo.hh:51
Definition: qtnode.hh:145
Definition: qtnode.hh:123
Definition: qtnode.hh:147
Definition: qtnode.hh:163
ParseInfo parseInfo
attribute for parser info
Definition: qtnode.hh:317
static const QtNodeType QtInheritance[][2]
the inheritance relations list
Definition: qtnode.hh:312
Definition: qtnode.hh:113
Definition: qtnode.hh:174
Definition: qtnode.hh:165
unsigned int r_Dimension
Definition: mddtypes.hh:118
Definition: qtnode.hh:107
virtual QtAreaType getAreaType()
test if the edge to the parent node is of type mdd or atomic
QtChildType
Definition: qtnode.hh:186
Definition: qtnode.hh:137
QtNodeType
Definition: qtnode.hh:93
void setType(const Type *newType)
Definition: qtnode.hh:157
Definition: qtnode.hh:117
Definition: qtnode.hh:394
void pauseTimer()
pause
bool isBaseType() const
const ParseInfo & getParseInfo()
Definition: qtnode.hh:134
Definition: qtnode.hh:111
Definition: qtnode.hh:175
Definition: qtnode.hh:144
static const int QtNodes
number of QtNodeTypes
Definition: qtnode.hh:306
Definition: qtnode.hh:133
const QtTypeElement & operator=(const QtTypeElement &)
assignment: cleanup + copy
Definition: qtnode.hh:106
Definition: qtnode.hh:128
struct containing dimension and triming information
Definition: qtnode.hh:80
Definition: qtnode.hh:173
void printStatus(std::ostream &s=std::cout) const
print type
virtual bool equalMeaning(QtNode *node)
test if the two nodes have an equal meaning in a subtree
Definition: qtnode.hh:135
Definition: qtnode.hh:104
Definition: qtnode.hh:99
Definition: qtnode.hh:142
Definition: qtnode.hh:126
Definition: qtnode.hh:134
virtual QtNodeList * getChilds(QtChildType flag)
return childs of the node
QtTypeTuple(unsigned int length=0)
Definition: qtnode.hh:121
friend bool operator<(const QtNodePair a, const QtNodePair b)
operator overload for QtNodePair struct
void stopTimer()
stop timer (at end of evaluation)
Definition: qtnode.hh:156
Definition: qtnode.hh:169
Definition: qtnode.hh:101
Definition: qtnode.hh:129
Definition: qtnode.hh:133
Definition: qtnode.hh:95
Definition: qtnode.hh:134
const char * getName() const
Definition: qtnode.hh:183
Definition: qtnode.hh:127
Definition: qtnode.hh:143
Definition: qtnode.hh:136
bool isInteger() const
Definition: qtnode.hh:125
virtual void printAlgebraicExpression(std::ostream &s=std::cout)=0
prints the algebraic expression
Definition: qtnode.hh:149
const Type * getType() const
void startTimer(const char *name)
start node timer (called at evaluation time)
Definition: qtnode.hh:148
Definition: qtnode.hh:108
Definition: qtnode.hh:96
Definition: qtnode.hh:172
void setParseInfo(const ParseInfo &info)
virtual void printTree(int tab, std::ostream &s=std::cout, QtChildType mode=QT_ALL_NODES)=0
prints the tree
Definition: qtnode.hh:138
Definition: qtnode.hh:73
Definition: qtnode.hh:171
Definition: qtnode.hh:116
Definition: qtnode.hh:154
r_Dimension dimension
Definition: qtnode.hh:82
Definition: qtnode.hh:124
Module: { raslib}.
Definition: rmdebug.hh:298
Definition: qtnode.hh:152
Definition: qtnode.hh:112
Definition: relcatalogif/type.hh:68
Definition: qtnode.hh:97
Definition: qtnode.hh:130
Definition: qtnode.hh:151
QtDataType
Definition: qtdata.hh:48
Definition: qtnode.hh:114
Definition: qtnode.hh:105
Definition: qtnode.hh:188
virtual std::string getSpelling()
creates a unique name for a common subexpression
Definition: qtnode.hh:135
Definition: qtnode.hh:170
Definition: qtoperation.hh:57
virtual void setInput(QtOperation *inputOld, QtOperation *inputNew)
Definition: qtnode.hh:155
Definition: qtnode.hh:122
const QtDataType getDataType() const
bool intervalFlag
Definition: qtnode.hh:84
Definition: qtnode.hh:115
Definition: qtnode.hh:133
Definition: qtnode.hh:109
Definition: qtnode.hh:134
Definition: qtnode.hh:162
std::string getEvaluationTime()
get elapsed time if timer was started, returns a string e.g. "15 usecs"
Definition: qtnode.hh:133
std::vector< QtOperation * > QtOperationList
list of QtOperation pointers
Definition: qtnode.hh:194
Definition: qtnode.hh:190
QtNode * getParent() const
Definition: qtnode.hh:133
Definition: qtnode.hh:120
void printStatus(std::ostream &s=std::cout) const
print type
Definition: qtnode.hh:134
Definition: qtnode.hh:146
enum QtNodeType getQtNodeTypeParent(enum QtNodeType)
method for pre optimizations (basically load optimization)
Definition: qtnode.hh:119
Definition: qtnode.hh:166
Definition: qtnode.hh:182
virtual ~QtNode()
destructor