1 #ifndef __STDAIR_BOM_BOMMANAGER_HPP
2 #define __STDAIR_BOM_BOMMANAGER_HPP
13 #include <boost/static_assert.hpp>
14 #include <boost/type_traits/is_same.hpp>
39 template <
typename OBJECT2,
typename OBJECT1>
45 template <
typename OBJECT2,
typename OBJECT1>
51 template <
typename OBJECT2,
typename OBJECT1>
52 static bool hasList (
const OBJECT1&);
57 template <
typename OBJECT2,
typename OBJECT1>
58 static bool hasMap (
const OBJECT1&);
65 template <
typename PARENT,
typename CHILD>
71 template <
typename PARENT,
typename CHILD>
79 template <
typename OBJECT2,
typename OBJECT1>
85 template <
typename OBJECT2,
typename OBJECT1>
94 template <
typename OBJECT2,
typename OBJECT1>
100 template <
typename OBJECT2,
typename OBJECT1>
103 const HolderMap_T& lHolderMap = iObject1.getHolderMap();
105 HolderMap_T::const_iterator itHolder = lHolderMap.find (&
typeid (OBJECT2));
107 if (itHolder == lHolderMap.end()) {
108 const std::string lName (
typeid (OBJECT2).name());
110 + lName +
" within: "
111 + iObject1.describeKey());
114 const BomHolder<OBJECT2>* lBomHolder_ptr =
115 static_cast<const BomHolder<OBJECT2>*
> (itHolder->second);
116 assert (lBomHolder_ptr != NULL);
118 return *lBomHolder_ptr;
125 template <
typename OBJECT2,
typename OBJECT1>
126 const typename BomHolder<OBJECT2>::BomList_T&
BomManager::
136 template <
typename OBJECT2,
typename OBJECT1>
145 BOOST_STATIC_ASSERT ((boost::is_same<OBJECT1, SegmentDate>::value ==
false
146 || boost::is_same<OBJECT2, SegmentDate>::value ==
false));
156 template <
typename OBJECT2,
typename OBJECT1>
159 const HolderMap_T& lHolderMap = iObject1.getHolderMap();
160 HolderMap_T::const_iterator itHolder = lHolderMap.find (&
typeid (OBJECT2));
162 if (itHolder == lHolderMap.end()) {
167 assert (lBomHolder_ptr != NULL);
169 return !lBomHolder_ptr->
_bomList.empty();
176 template <
typename OBJECT2,
typename OBJECT1>
179 const HolderMap_T& lHolderMap = iObject1.getHolderMap();
180 HolderMap_T::const_iterator itHolder = lHolderMap.find (&
typeid (OBJECT2));
182 if (itHolder == lHolderMap.end()) {
187 assert (lBomHolder_ptr != NULL);
189 return !lBomHolder_ptr->
_bomMap.empty();
195 template <
typename PARENT,
typename CHILD>
198 PARENT*
const lParent_ptr =
static_cast<PARENT* const
> (iChild.getParent());
205 template <
typename PARENT,
typename CHILD>
208 PARENT*
const lParent_ptr = getParentPtr<PARENT> (iChild);
209 assert (lParent_ptr != NULL);
216 template <
typename OBJECT2,
typename OBJECT1>
225 BOOST_STATIC_ASSERT ((boost::is_same<OBJECT1, SegmentDate>::value ==
false
226 || boost::is_same<OBJECT2, SegmentDate>::value ==
false));
228 OBJECT2* oBom_ptr = NULL;
230 const HolderMap_T& lHolderMap = iObject1.getHolderMap();
232 typename HolderMap_T::const_iterator itHolder =
233 lHolderMap.find (&
typeid (OBJECT2));
235 if (itHolder != lHolderMap.end()) {
239 assert (lBomHolder_ptr != NULL);
243 BomMap_T& lBomMap = lBomHolder_ptr->
_bomMap;
244 typename BomMap_T::iterator itBom = lBomMap.find (iKey);
246 if (itBom != lBomMap.end()) {
247 oBom_ptr = itBom->second;
248 assert (oBom_ptr != NULL);
258 template <
typename OBJECT2,
typename OBJECT1>
267 BOOST_STATIC_ASSERT ((boost::is_same<OBJECT1, SegmentDate>::value ==
false
268 || boost::is_same<OBJECT2, SegmentDate>::value ==
false));
270 OBJECT2* oBom_ptr = NULL;
272 typedef std::map<const MapKey_T, OBJECT2*> BomMap_T;
273 const BomMap_T& lBomMap = getMap<OBJECT2> (iObject1);
275 typename BomMap_T::const_iterator itBom = lBomMap.find (iKey);
277 if (itBom == lBomMap.end()) {
278 const std::string lName (
typeid (OBJECT2).name());
281 <<
" with key " << iKey <<
" within: "
282 << iObject1.describeKey());
286 oBom_ptr = itBom->second;
287 assert (oBom_ptr != NULL);
303 inline bool BomManager::hasList<SegmentDate,SegmentDate>
307 ioSegmentDate.getMarketingSegmentDateList ();
308 const bool isMarketingSegmentDateListEmpty =
309 lMarketingSegmentDateList.empty();
310 return isMarketingSegmentDateListEmpty;
319 BomManager::getList<SegmentDate,SegmentDate> (
const SegmentDate& ioSegmentDate) {
322 ioSegmentDate.getMarketingSegmentDateList ();
323 return lMarketingSegmentDateList;
331 inline bool BomManager::hasMap<SegmentDate,SegmentDate>
334 const bool hasList =
false;
339 #endif // __STDAIR_BOM_BOMMANAGER_HPP