summaryrefslogtreecommitdiffstats
path: root/qlparser/qtiterator.hh
blob: d2fad41ff1a2170f2e615aff53db7d41b99f4948 (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
/*
* 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