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