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
|
// -*- mode: c++ -*-
#ifndef _CQUERYTREEBUILDER
#define _CQUERYTREEBUILDER
#include "libMRML/include/uses-declarations.h"
class CAlgorithm;
class CAccessorAdminCollection;
#include "libMRML/include/CMagic.h" // checking CQueryTreeNode
#include "libMRML/include/CQueryTreeNode.h"
#include "libMRML/include/CSelfDestroyPointer.h"
class CStaticQueryFactory;
/**
A type helping in the translation from CAlgorithmID
to CQuery*
*/
class CQueryContainer:public map<string,CQueryTreeNode* >,public CMagic{
public:
/**
Translate an CAlgorithmID to the corresponding CQueryTreeNode
*/
CQueryTreeNode* getQueryByID(const string& inID)const;
};
/**
This class builds and maintains a query tree.
*/
class CQueryTreeBuilder{
public:
/** */
CQueryTreeBuilder();
/**
Building a query tree out of the information we have gathered.
true indicates success...
We do a post-order traversal of the tree of algorithms:
At each level we construct the query of the children
taking them as an argument for constructing the query of
this.
*/
pair<CQueryContainer*,CQueryTreeNode*> buildQueryTree(CAlgorithm& inAlgorithm,
CAccessorAdminCollection& inBaseConfiguration,
CStaticQueryFactory& inBaseTypeFactory,
CQueryContainer* inContainer=0)const;
/** Getting a node of the tree by its
ID */
CQueryTreeNode* getQueryByID(const string& inID)const;
};
#endif
|