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
|
/*
* 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>.
*/
#ifndef _QTITERATOR_
#define _QTITERATOR_
#include "qlparser/qtoncstream.hh"
#include <vector>
/*************************************************************
*
*
* COMMENTS:
*
************************************************************/
//@ManMemo: Module: {\bf qlparser}
/*@Doc:
It is super class for every class capable of iterating over collections of MDD.
It has a list of inputs of type QtONCStream, so every instance of type
QtONCStream or of a subtype of it can serve as an input stream for a QtIterator
object. The input streams can be combined differently, as cross product of the
inputs in class QtSelectionIterator or as simple tupels in the order they occure
in the input streams in class QtOperationIterator.
*/
class QtIterator : public QtONCStream
{
public:
/// list of QtONCStream objects
typedef std::vector<QtONCStream*> QtONCStreamList;
/// default constructor
QtIterator();
/// constructor getting a pointer to the parent
QtIterator( QtNode* node );
/// destructor
virtual ~QtIterator();
/// return childs of the node
virtual QtNodeList* getChilds( QtChildType flag );
/// prints the tree
virtual void printTree( int tab, std::ostream& s = std::cout, QtChildType mode = QT_ALL_NODES );
/// prints the algebraic expression
virtual void printAlgebraicExpression( std::ostream& s = std::cout );
//@Man: Operations of the ONC protocol
//@{
///
virtual void open();
///
virtual void close();
///
virtual void reset();
//@}
//@Man: Read/Write methods:
//@{
///
inline void setStreamInputs( QtONCStreamList* inputs );
/// Returns inputs
QtONCStreamList* getStreamInputs();
/// exchange the stream input {\tt oldInput} with {\tt newInput}
void setStreamInput( QtONCStream* oldInput, QtONCStream* newInput );
///
//inline virtual void setParents();
//@}
/// pre optimization
//virtual void preOptimize();
/**
Pre-Optimization step is passed to the input streams.
*/
/// get input type tuple
void getInputTypeTuple( QtTypeTuple& typeTuple );
protected:
/// list of input streams
QtONCStreamList* inputs;
private:
/// atribute for identification of nodes
static const QtNodeType nodeType;
};
#include "qlparser/qtiterator.icc"
#endif
|