OpticalNode.h revision 10447
110447Snilay@cs.wisc.edu#ifndef __DSENT_MODEL_OPTICALGRAPH_OPTICALNODE_H__ 210447Snilay@cs.wisc.edu#define __DSENT_MODEL_OPTICALGRAPH_OPTICALNODE_H__ 310447Snilay@cs.wisc.edu 410447Snilay@cs.wisc.edu#include "model/OpticalModel.h" 510447Snilay@cs.wisc.edu#include "util/CommonType.h" 610447Snilay@cs.wisc.edu 710447Snilay@cs.wisc.edunamespace DSENT 810447Snilay@cs.wisc.edu{ 910447Snilay@cs.wisc.edu class OpticalNode; 1010447Snilay@cs.wisc.edu 1110447Snilay@cs.wisc.edu //TODO: Change to detector 1210447Snilay@cs.wisc.edu typedef std::pair<OpticalNode*, double> DetectorEntry; 1310447Snilay@cs.wisc.edu typedef std::vector<DetectorEntry> DetectorTable; 1410447Snilay@cs.wisc.edu 1510447Snilay@cs.wisc.edu class OpticalNode 1610447Snilay@cs.wisc.edu { 1710447Snilay@cs.wisc.edu public: 1810447Snilay@cs.wisc.edu // The starting visited number flag of all optical nodes 1910447Snilay@cs.wisc.edu static const int OPTICAL_NODE_INIT_VISITED_NUM; 2010447Snilay@cs.wisc.edu 2110447Snilay@cs.wisc.edu // The types of optical nodes that can exist 2210447Snilay@cs.wisc.edu enum Type 2310447Snilay@cs.wisc.edu { 2410447Snilay@cs.wisc.edu WAVEGUIDE, 2510447Snilay@cs.wisc.edu LASER, 2610447Snilay@cs.wisc.edu MODULATOR, 2710447Snilay@cs.wisc.edu FILTER, 2810447Snilay@cs.wisc.edu DETECTOR 2910447Snilay@cs.wisc.edu }; 3010447Snilay@cs.wisc.edu 3110447Snilay@cs.wisc.edu public: 3210447Snilay@cs.wisc.edu OpticalNode(Type type_, const String& instance_name_, OpticalModel* model_, const WavelengthGroup& wavelengths_); 3310447Snilay@cs.wisc.edu ~OpticalNode(); 3410447Snilay@cs.wisc.edu 3510447Snilay@cs.wisc.edu public: 3610447Snilay@cs.wisc.edu // Get the type of optical node 3710447Snilay@cs.wisc.edu Type getType() const; 3810447Snilay@cs.wisc.edu // Return instance name 3910447Snilay@cs.wisc.edu const String& getInstanceName() const; 4010447Snilay@cs.wisc.edu // Get the downstream optical nodes 4110447Snilay@cs.wisc.edu vector<OpticalNode*>* getDownstreamNodes() const; 4210447Snilay@cs.wisc.edu // Connect the downstream optical node 4310447Snilay@cs.wisc.edu void addDownstreamNode(OpticalNode* node_); 4410447Snilay@cs.wisc.edu // Return the node's parent model 4510447Snilay@cs.wisc.edu OpticalModel* getModel(); 4610447Snilay@cs.wisc.edu const OpticalModel* getModel() const; 4710447Snilay@cs.wisc.edu // Get wavelength groups 4810447Snilay@cs.wisc.edu WavelengthGroup getWavelengths() const; 4910447Snilay@cs.wisc.edu // Returns whether the node is expecting a set of wavelengths 5010447Snilay@cs.wisc.edu bool isExpected(const WavelengthGroup& wavelengths_) const; 5110447Snilay@cs.wisc.edu 5210447Snilay@cs.wisc.edu // Trace wavelengths, find and put all found lasers, modulators, and detectors 5310447Snilay@cs.wisc.edu //virtual void traceWavelengths(const WavelengthGroup& wavelengths_, OpticalNode* laser_, 5410447Snilay@cs.wisc.edu // OpticalNode* modulator_, DetectorTable* detectors_, double current_loss_) const; 5510447Snilay@cs.wisc.edu 5610447Snilay@cs.wisc.edu //----------------------------------------------------------------- 5710447Snilay@cs.wisc.edu // Node variables for wavelength tracing 5810447Snilay@cs.wisc.edu //----------------------------------------------------------------- 5910447Snilay@cs.wisc.edu // Loss incurred at this optical node 6010447Snilay@cs.wisc.edu void setLoss(double loss_); 6110447Snilay@cs.wisc.edu double getLoss() const; 6210447Snilay@cs.wisc.edu // Visited number marker 6310447Snilay@cs.wisc.edu void setVisitedNum(int visited_num_); 6410447Snilay@cs.wisc.edu int getVisitedNum() const; 6510447Snilay@cs.wisc.edu //----------------------------------------------------------------- 6610447Snilay@cs.wisc.edu 6710447Snilay@cs.wisc.edu 6810447Snilay@cs.wisc.edu private: 6910447Snilay@cs.wisc.edu // Disable copy constructor 7010447Snilay@cs.wisc.edu OpticalNode(const OpticalNode& node_); 7110447Snilay@cs.wisc.edu 7210447Snilay@cs.wisc.edu private: 7310447Snilay@cs.wisc.edu // The type of optical node 7410447Snilay@cs.wisc.edu const Type m_type_; 7510447Snilay@cs.wisc.edu // Name of this instance 7610447Snilay@cs.wisc.edu String m_instance_name_; 7710447Snilay@cs.wisc.edu // A pointer to the model that contains this node 7810447Snilay@cs.wisc.edu OpticalModel* m_model_; 7910447Snilay@cs.wisc.edu // Downstream optical node 8010447Snilay@cs.wisc.edu vector<OpticalNode*>* m_downstream_nodes_; 8110447Snilay@cs.wisc.edu // Path visited count (so that you don't have to clear it) 8210447Snilay@cs.wisc.edu int m_visited_num_; 8310447Snilay@cs.wisc.edu // The amount of loss incurred at this optical node 8410447Snilay@cs.wisc.edu double m_loss_; 8510447Snilay@cs.wisc.edu // The wavelengths this optical node is supposed to see 8610447Snilay@cs.wisc.edu const WavelengthGroup m_wavelengths_; 8710447Snilay@cs.wisc.edu }; 8810447Snilay@cs.wisc.edu 8910447Snilay@cs.wisc.edu} // namespace DSENT 9010447Snilay@cs.wisc.edu 9110447Snilay@cs.wisc.edu#endif // __DSENT_MODEL_OPTICALGRAPH_OPTICALNODE_H__ 9210447Snilay@cs.wisc.edu 93