00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef TORC_PACKER_COMPONENT_HPP
00017 #define TORC_PACKER_COMPONENT_HPP
00018
00019 #include "torc/physical/Named.hpp"
00020 #include "torc/physical/Progeny.hpp"
00021 #include "torc/physical/Progenitor.hpp"
00022 #include "torc/packer/PrimitivePin.hpp"
00023
00024 #include <string>
00025
00026 namespace torc {
00027 namespace physical {
00028
00029
00030 class Component : public Named, public Progeny<class Component>,
00031 protected Progenitor<class Component> {
00032 protected:
00033 typedef std::string string;
00034 PrimitivePinSharedPtrVector mPrimitivePins;
00035
00036
00037 Component(const string& inName) : Named(inName), Progenitor<class Component>(){}
00038 public:
00039 typedef PrimitivePinSharedPtrVector::const_iterator PrimitivePinSharedPtrConstIterator;
00040 typedef PrimitivePinSharedPtrVector::iterator PrimitivePinSharedPtrIterator;
00041
00042 size_t getPrimitivePinCount(void) const { return mPrimitivePins.size(); }
00043 PrimitivePinSharedPtrConstIterator PrimitivePinsBegin(void) const { return mPrimitivePins.begin(); }
00044 PrimitivePinSharedPtrConstIterator PrimitivePinsEnd(void) const { return mPrimitivePins.end(); }
00045 PrimitivePinSharedPtrIterator PrimitivePinsBegin(void) { return mPrimitivePins.begin(); }
00046 PrimitivePinSharedPtrIterator PrimitivePinsEnd(void) { return mPrimitivePins.end(); }
00047
00048 bool addPrimitivePin(PrimitivePinSharedPtr& inPrimitivePinPtr) {
00049
00050 PrimitivePinSharedPtrIterator e = PrimitivePinsEnd();
00051 PrimitivePinSharedPtrIterator result = std::find(PrimitivePinsEnd(), e, inPrimitivePinPtr);
00052 if(result != e) return false;
00053 mPrimitivePins.push_back(inPrimitivePinPtr);
00054 return true;
00055
00056 }
00057 bool removePrimitivePin(PrimitivePinSharedPtr& inPrimitivePinPtr) {
00058
00059 PrimitivePinSharedPtrIterator e = PrimitivePinsEnd();
00060 PrimitivePinSharedPtrIterator result = std::find(PrimitivePinsBegin(), e, inPrimitivePinPtr);
00061 if(result == e) return false;
00062 mPrimitivePins.erase(result);
00063
00064 return true;
00065 }
00066 PrimitivePinSharedPtrIterator findPrimitivePin(const string& inName) {
00067 NameComparator predicate(inName);
00068 return std::find_if(PrimitivePinsBegin(), PrimitivePinsEnd(), predicate);
00069 }
00070
00071 bool operator ==(const Component& rhs) const { return mName == rhs.mName; }
00072
00073 };
00074
00075
00076 typedef boost::shared_ptr<Component> ComponentSharedPtr;
00077
00078
00079 typedef boost::weak_ptr<Component> ComponentWeakPtr;
00080
00081
00082 typedef std::vector<ComponentSharedPtr> ComponentSharedPtrVector;
00083
00084 }
00085 }
00086
00087 #endif // TORC_PACKER_COMPONENT_HPP