3 #ifndef SmiScenarioTree_H
4 #define SmiScenarioTree_H
108 std::vector<SmiTreeNode<T> *> *vec =
new std::vector<SmiTreeNode<T> *> (i);
109 (*vec)[--i] = pnode = pnode->
getChild();
226 typename std::vector<T>::iterator
scenEnd(
int s) {
247 assert (scenario <
leaf_.size());
249 assert (stage < n->depth() + 1);
250 while (stage < n->depth())
257 return (
int)
leaf_.size();
263 assert(label.size()>0);
266 while ((i < label.size()) && (next = n->getChildByLabel(label[i]))) {
290 assert (scenario < (
int)
leaf_.size());
301 int i = n->depth() + 1;
323 unsigned int start = 0) {
325 int scenario =
static_cast<int>(
leaf_.size());
327 parent =
find(brscenario, stage);
331 if (pathdata.size()) {
332 leaf_.push_back(parent);
334 return static_cast<int>(
leaf_.size()) - 1;
355 int scenario =
static_cast<int>(
leaf_.size());
357 parent =
find(labels);
361 i = parent->
depth() + 1;
365 if (pathdata.size()) {
366 leaf_.push_back(parent);
368 return static_cast<int>(
leaf_.size()) - 1;
373 std::vector<T> &pathdata,
int start) {
375 for (
unsigned int i = start; i < pathdata.size(); ++i) {
377 parent = parent->
addChild(*&pathdata[i], scenario);
380 root_->setScenario(scenario);
407 std::vector<SmiTreeNode<T> *>
leaf_;
419 #endif //SmiScenarioTree_H
std::vector< SmiTreeNode< T > * > * getChildren()
SmiTreeNode< T > * addNodesToTree(SmiTreeNode< T > *parent, int scenario, std::vector< T > &pathdata, int start)
Add new path from branching node to leaf.
std::vector< T >::iterator scenEnd(int s)
begin
SmiTreeNode< T > * find(std::vector< int > &label)
Get node identified by longest match to array of labels.
std::vector< SmiTreeNode< T > * > leaf_
SmiTreeNode< T > * getParent()
SmiTreeNode< T > * getChildP()
void setSibling(SmiTreeNode< T > *s)
void SmiScenarioTreeUnitTest()
A function that tests the methods in the SmiScenarioTree class.
std::vector< T > & getScenario(int scenario)
Get vector of node data for given scenario.
SmiTreeNode< T > * getSibling()
SmiTreeNode< T > * parent_
SmiTreeNode()
Default Constructor creates an empty node.
SmiTreeNode< T > * sibling_
std::vector< T > & wholeTree()
whole tree
SmiTreeNode< T > * getRoot()
Get root node.
std::vector< T > node_data
Constant pos(const Constant &c)
for returning non-negative value of the constant.
SmiTreeNode< T > * addChild(T cd, int scenario)
void setLastChildLabel(int label)
int addPathtoLeaf(int brscenario, int stage, std::vector< T > &pathdata, unsigned int start=0)
Add new path from branching node to leaf.
SmiTreeNode< T > * getLeaf(int scn)
Get leaf node.
void setChild(SmiTreeNode< T > *c)
SmiTreeNode< T > * find(unsigned int scenario, int stage)
Get node identified by scenario/stage.
SmiTreeNode< T > * find(int *label, unsigned int sz)
Get node identified by longest match to array of labels.
int addPathtoLeaf(std::vector< int > &labels, std::vector< T > &pathdata)
Add new path using labels to find branching node.
std::vector< T >::iterator treeEnd()
end
SmiTreeNode< T > * getChildByLabel(int n)
void SmiTreeNodeUnitTest()
A function that tests the methods in the SmiTreeNode class.
std::map< int, SmiTreeNode< T > * > child_label_map
std::vector< T >::iterator scenBegin(int s)
scenario iterators TODO: native code for these iterators that does not depend on copying.
SmiTreeNode< T > * getParentP()
SmiTreeNode< T > * getChild()
void setChildLabels(SmiTreeNode< T > *n, std::vector< int > labels)
Set child labels.
child_label_map child_labels_
SmiTreeNode< T > * child_
int getNumScenarios()
get number of scenarios
std::vector< T > scen_data
SmiTreeNode< T > * getSiblingP()
std::vector< T >::iterator treeBegin()
begin