OpticalNode.cc revision 10447
14997Sgblack@eecs.umich.edu 24997Sgblack@eecs.umich.edu#include "model/optical_graph/OpticalNode.h" 34997Sgblack@eecs.umich.edu 44997Sgblack@eecs.umich.edunamespace DSENT 54997Sgblack@eecs.umich.edu{ 64997Sgblack@eecs.umich.edu // Set the optical node initial visited num 74997Sgblack@eecs.umich.edu const int OpticalNode::OPTICAL_NODE_INIT_VISITED_NUM = 0; 84997Sgblack@eecs.umich.edu 94997Sgblack@eecs.umich.edu OpticalNode::OpticalNode(Type type_, const String& instance_name_, OpticalModel* model_, const WavelengthGroup& wavelengths_) 104997Sgblack@eecs.umich.edu :m_type_(type_), m_instance_name_(instance_name_), m_model_(model_), m_wavelengths_(wavelengths_) 114997Sgblack@eecs.umich.edu { 124997Sgblack@eecs.umich.edu m_loss_ = 0.0; 134997Sgblack@eecs.umich.edu setVisitedNum(OpticalNode::OPTICAL_NODE_INIT_VISITED_NUM); 144997Sgblack@eecs.umich.edu m_downstream_nodes_ = new vector<OpticalNode*>; 154997Sgblack@eecs.umich.edu } 164997Sgblack@eecs.umich.edu 174997Sgblack@eecs.umich.edu OpticalNode::~OpticalNode() 184997Sgblack@eecs.umich.edu { 194997Sgblack@eecs.umich.edu 204997Sgblack@eecs.umich.edu } 214997Sgblack@eecs.umich.edu 224997Sgblack@eecs.umich.edu OpticalNode::Type OpticalNode::getType() const 234997Sgblack@eecs.umich.edu { 244997Sgblack@eecs.umich.edu return m_type_; 254997Sgblack@eecs.umich.edu } 264997Sgblack@eecs.umich.edu 274997Sgblack@eecs.umich.edu vector<OpticalNode*>* OpticalNode::getDownstreamNodes() const 284997Sgblack@eecs.umich.edu { 294997Sgblack@eecs.umich.edu return m_downstream_nodes_; 304997Sgblack@eecs.umich.edu } 314997Sgblack@eecs.umich.edu 324997Sgblack@eecs.umich.edu const String& OpticalNode::getInstanceName() const 334997Sgblack@eecs.umich.edu { 344997Sgblack@eecs.umich.edu return m_instance_name_; 354997Sgblack@eecs.umich.edu } 364997Sgblack@eecs.umich.edu 374997Sgblack@eecs.umich.edu OpticalModel* OpticalNode::getModel() 384997Sgblack@eecs.umich.edu { 394997Sgblack@eecs.umich.edu return m_model_; 404997Sgblack@eecs.umich.edu } 414997Sgblack@eecs.umich.edu 424997Sgblack@eecs.umich.edu const OpticalModel* OpticalNode::getModel() const 434997Sgblack@eecs.umich.edu { 444997Sgblack@eecs.umich.edu return (const OpticalModel*) m_model_; 454997Sgblack@eecs.umich.edu } 464997Sgblack@eecs.umich.edu 474997Sgblack@eecs.umich.edu void OpticalNode::addDownstreamNode(OpticalNode* node_) 484997Sgblack@eecs.umich.edu { 494997Sgblack@eecs.umich.edu ASSERT(node_->isExpected(getWavelengths()), "[Error] " + getInstanceName() + 504997Sgblack@eecs.umich.edu " -> Downstream node not expecting a superset of the current wavelengths"); 514997Sgblack@eecs.umich.edu m_downstream_nodes_->push_back(node_); 524997Sgblack@eecs.umich.edu } 534997Sgblack@eecs.umich.edu 544997Sgblack@eecs.umich.edu WavelengthGroup OpticalNode::getWavelengths() const 554997Sgblack@eecs.umich.edu { 565236Sgblack@eecs.umich.edu return m_wavelengths_; 575245Sgblack@eecs.umich.edu } 584997Sgblack@eecs.umich.edu 595237Sgblack@eecs.umich.edu bool OpticalNode::isExpected(const WavelengthGroup& wavelengths_) const 605245Sgblack@eecs.umich.edu { 615236Sgblack@eecs.umich.edu // Check that the lower limits are within bounds 625245Sgblack@eecs.umich.edu bool lower_match = (wavelengths_.first >= getWavelengths().first); 635245Sgblack@eecs.umich.edu // Check that the upper limits are within bounds 645245Sgblack@eecs.umich.edu bool upper_match = (wavelengths_.second <= getWavelengths().second); 655245Sgblack@eecs.umich.edu // Assert that there are no misalignments 665245Sgblack@eecs.umich.edu ASSERT(lower_match == upper_match, "[Error] " + getInstanceName() + 675245Sgblack@eecs.umich.edu " -> Wavelength group misalignment!"); 685245Sgblack@eecs.umich.edu // Both upper and lower bounds must match 695245Sgblack@eecs.umich.edu return (upper_match && lower_match); 705245Sgblack@eecs.umich.edu } 714997Sgblack@eecs.umich.edu 725245Sgblack@eecs.umich.edu //------------------------------------------------------------------------- 735245Sgblack@eecs.umich.edu void OpticalNode::setLoss(double loss_) 744997Sgblack@eecs.umich.edu { 755124Sgblack@eecs.umich.edu m_loss_ = loss_; 765245Sgblack@eecs.umich.edu } 775245Sgblack@eecs.umich.edu 785245Sgblack@eecs.umich.edu double OpticalNode::getLoss() const 794997Sgblack@eecs.umich.edu { 804997Sgblack@eecs.umich.edu return m_loss_; 814997Sgblack@eecs.umich.edu } 824997Sgblack@eecs.umich.edu 834997Sgblack@eecs.umich.edu void OpticalNode::setVisitedNum(int visited_num_) 844997Sgblack@eecs.umich.edu { 855124Sgblack@eecs.umich.edu m_visited_num_ = visited_num_; 864997Sgblack@eecs.umich.edu } 874997Sgblack@eecs.umich.edu 884997Sgblack@eecs.umich.edu int OpticalNode::getVisitedNum() const 894997Sgblack@eecs.umich.edu { 904997Sgblack@eecs.umich.edu return m_visited_num_; 914997Sgblack@eecs.umich.edu } 925124Sgblack@eecs.umich.edu //------------------------------------------------------------------------- 93 94} // namespace DSENT 95 96 97