OpticalNode.cc revision 10447
110447Snilay@cs.wisc.edu 210447Snilay@cs.wisc.edu#include "model/optical_graph/OpticalNode.h" 310447Snilay@cs.wisc.edu 410447Snilay@cs.wisc.edunamespace DSENT 510447Snilay@cs.wisc.edu{ 610447Snilay@cs.wisc.edu // Set the optical node initial visited num 710447Snilay@cs.wisc.edu const int OpticalNode::OPTICAL_NODE_INIT_VISITED_NUM = 0; 810447Snilay@cs.wisc.edu 910447Snilay@cs.wisc.edu OpticalNode::OpticalNode(Type type_, const String& instance_name_, OpticalModel* model_, const WavelengthGroup& wavelengths_) 1010447Snilay@cs.wisc.edu :m_type_(type_), m_instance_name_(instance_name_), m_model_(model_), m_wavelengths_(wavelengths_) 1110447Snilay@cs.wisc.edu { 1210447Snilay@cs.wisc.edu m_loss_ = 0.0; 1310447Snilay@cs.wisc.edu setVisitedNum(OpticalNode::OPTICAL_NODE_INIT_VISITED_NUM); 1410447Snilay@cs.wisc.edu m_downstream_nodes_ = new vector<OpticalNode*>; 1510447Snilay@cs.wisc.edu } 1610447Snilay@cs.wisc.edu 1710447Snilay@cs.wisc.edu OpticalNode::~OpticalNode() 1810447Snilay@cs.wisc.edu { 1910447Snilay@cs.wisc.edu 2010447Snilay@cs.wisc.edu } 2110447Snilay@cs.wisc.edu 2210447Snilay@cs.wisc.edu OpticalNode::Type OpticalNode::getType() const 2310447Snilay@cs.wisc.edu { 2410447Snilay@cs.wisc.edu return m_type_; 2510447Snilay@cs.wisc.edu } 2610447Snilay@cs.wisc.edu 2710447Snilay@cs.wisc.edu vector<OpticalNode*>* OpticalNode::getDownstreamNodes() const 2810447Snilay@cs.wisc.edu { 2910447Snilay@cs.wisc.edu return m_downstream_nodes_; 3010447Snilay@cs.wisc.edu } 3110447Snilay@cs.wisc.edu 3210447Snilay@cs.wisc.edu const String& OpticalNode::getInstanceName() const 3310447Snilay@cs.wisc.edu { 3410447Snilay@cs.wisc.edu return m_instance_name_; 3510447Snilay@cs.wisc.edu } 3610447Snilay@cs.wisc.edu 3710447Snilay@cs.wisc.edu OpticalModel* OpticalNode::getModel() 3810447Snilay@cs.wisc.edu { 3910447Snilay@cs.wisc.edu return m_model_; 4010447Snilay@cs.wisc.edu } 4110447Snilay@cs.wisc.edu 4210447Snilay@cs.wisc.edu const OpticalModel* OpticalNode::getModel() const 4310447Snilay@cs.wisc.edu { 4410447Snilay@cs.wisc.edu return (const OpticalModel*) m_model_; 4510447Snilay@cs.wisc.edu } 4610447Snilay@cs.wisc.edu 4710447Snilay@cs.wisc.edu void OpticalNode::addDownstreamNode(OpticalNode* node_) 4810447Snilay@cs.wisc.edu { 4910447Snilay@cs.wisc.edu ASSERT(node_->isExpected(getWavelengths()), "[Error] " + getInstanceName() + 5010447Snilay@cs.wisc.edu " -> Downstream node not expecting a superset of the current wavelengths"); 5110447Snilay@cs.wisc.edu m_downstream_nodes_->push_back(node_); 5210447Snilay@cs.wisc.edu } 5310447Snilay@cs.wisc.edu 5410447Snilay@cs.wisc.edu WavelengthGroup OpticalNode::getWavelengths() const 5510447Snilay@cs.wisc.edu { 5610447Snilay@cs.wisc.edu return m_wavelengths_; 5710447Snilay@cs.wisc.edu } 5810447Snilay@cs.wisc.edu 5910447Snilay@cs.wisc.edu bool OpticalNode::isExpected(const WavelengthGroup& wavelengths_) const 6010447Snilay@cs.wisc.edu { 6110447Snilay@cs.wisc.edu // Check that the lower limits are within bounds 6210447Snilay@cs.wisc.edu bool lower_match = (wavelengths_.first >= getWavelengths().first); 6310447Snilay@cs.wisc.edu // Check that the upper limits are within bounds 6410447Snilay@cs.wisc.edu bool upper_match = (wavelengths_.second <= getWavelengths().second); 6510447Snilay@cs.wisc.edu // Assert that there are no misalignments 6610447Snilay@cs.wisc.edu ASSERT(lower_match == upper_match, "[Error] " + getInstanceName() + 6710447Snilay@cs.wisc.edu " -> Wavelength group misalignment!"); 6810447Snilay@cs.wisc.edu // Both upper and lower bounds must match 6910447Snilay@cs.wisc.edu return (upper_match && lower_match); 7010447Snilay@cs.wisc.edu } 7110447Snilay@cs.wisc.edu 7210447Snilay@cs.wisc.edu //------------------------------------------------------------------------- 7310447Snilay@cs.wisc.edu void OpticalNode::setLoss(double loss_) 7410447Snilay@cs.wisc.edu { 7510447Snilay@cs.wisc.edu m_loss_ = loss_; 7610447Snilay@cs.wisc.edu } 7710447Snilay@cs.wisc.edu 7810447Snilay@cs.wisc.edu double OpticalNode::getLoss() const 7910447Snilay@cs.wisc.edu { 8010447Snilay@cs.wisc.edu return m_loss_; 8110447Snilay@cs.wisc.edu } 8210447Snilay@cs.wisc.edu 8310447Snilay@cs.wisc.edu void OpticalNode::setVisitedNum(int visited_num_) 8410447Snilay@cs.wisc.edu { 8510447Snilay@cs.wisc.edu m_visited_num_ = visited_num_; 8610447Snilay@cs.wisc.edu } 8710447Snilay@cs.wisc.edu 8810447Snilay@cs.wisc.edu int OpticalNode::getVisitedNum() const 8910447Snilay@cs.wisc.edu { 9010447Snilay@cs.wisc.edu return m_visited_num_; 9110447Snilay@cs.wisc.edu } 9210447Snilay@cs.wisc.edu //------------------------------------------------------------------------- 9310447Snilay@cs.wisc.edu 9410447Snilay@cs.wisc.edu} // namespace DSENT 9510447Snilay@cs.wisc.edu 9610447Snilay@cs.wisc.edu 97