BWAPI
SPAR/AIModule/SparAIModule/PerceptualState/Locations/Static/CompositeLocationBase.h
Go to the documentation of this file.
00001 #pragma once
00002 #include "StaticLocationBase.h"
00003 #include "PrimitiveLocationBase.h"
00004 
00005 class CompositeLocation;
00006 class StaticLocation;
00007 
00008 class CompositeLocationBase : public virtual StaticLocationBase
00009 {
00010 protected:
00011   friend class StaticLocation;
00012 
00013   template <class UnitType>
00014   class UnitWrapper
00015   {
00016   public:
00017     UnitWrapper(UnitType* unit)
00018       : m_unit(unit)
00019     {}
00020     UnitType* getUnit() { return m_unit; }
00021     const UnitType* getUnit() const { return m_unit; }
00022   protected:
00023     friend class CompositeLocation;
00024     UnitType* const m_unit;
00025     typename stdext::hash_multimap<BWAPI::UnitType, UnitWrapper>::const_iterator m_posInContainer;
00026   };
00027   template <class UnitType>
00028   struct extract_unit : std::unary_function<UnitWrapper<UnitType>, UnitType*>
00029   {
00030     UnitType* operator()(UnitWrapper<UnitType>& unitWrapper) const
00031     {
00032       return unitWrapper.getUnit();
00033     }
00034   };
00035   template <class UnitType>
00036   struct extract_unit_const : std::unary_function<UnitWrapper<UnitType>, const UnitType*>
00037   {
00038     extract_unit_const() {}
00039     extract_unit_const(const extract_unit<UnitType>&) {}
00040 
00041     const UnitType* operator()(const UnitWrapper<UnitType>& unitWrapper) const
00042     {
00043       return unitWrapper.getUnit();
00044     }
00045   };
00046 
00047   typedef boost::transform_iterator<composite_functor<extract_unit_const<OwnUnit>, extract_pair_second_const<stdext::hash_multimap<BWAPI::UnitType, UnitWrapper<OwnUnit>>::const_iterator::value_type>>, 
00048                                     stdext::hash_multimap<BWAPI::UnitType, UnitWrapper<OwnUnit>>::const_iterator> 
00049           own_unit_const_iterator;
00050   typedef own_unit_const_iterator
00051           own_unit_type_const_iterator;
00052   typedef boost::filter_iterator<IsBuilding<OwnUnit>, own_unit_const_iterator>
00053           own_building_const_iterator;
00054 
00055   typedef boost::transform_iterator<composite_functor<extract_unit<EnemyUnit>, extract_pair_second<stdext::hash_multimap<BWAPI::UnitType, UnitWrapper<EnemyUnit>>::iterator::value_type>>, 
00056                                     stdext::hash_multimap<BWAPI::UnitType, UnitWrapper<EnemyUnit>>::iterator> 
00057           enemy_unit_iterator;
00058   typedef enemy_unit_iterator 
00059           enemy_unit_type_iterator;
00060   typedef boost::filter_iterator<IsBuilding<EnemyUnit>, enemy_unit_iterator>
00061           enemy_building_iterator;
00062   typedef boost::transform_iterator<composite_functor<extract_unit_const<EnemyUnit>, extract_pair_second_const<stdext::hash_multimap<BWAPI::UnitType, UnitWrapper<EnemyUnit>>::const_iterator::value_type>>, 
00063                                     stdext::hash_multimap<BWAPI::UnitType, UnitWrapper<EnemyUnit>>::const_iterator> 
00064           enemy_unit_const_iterator;
00065   typedef enemy_unit_const_iterator 
00066     enemy_unit_type_const_iterator;
00067   typedef boost::filter_iterator<IsBuilding<EnemyUnit>, enemy_unit_const_iterator>
00068           enemy_building_const_iterator;
00069 
00070   typedef boost::transform_iterator<composite_functor<extract_unit<NeutralUnit>, extract_pair_second<stdext::hash_multimap<BWAPI::UnitType, UnitWrapper<NeutralUnit>>::iterator::value_type>>, 
00071                                     stdext::hash_multimap<BWAPI::UnitType, UnitWrapper<NeutralUnit>>::iterator> 
00072           neutral_unit_iterator;
00073   typedef neutral_unit_iterator 
00074           neutral_unit_type_iterator;
00075   typedef boost::filter_iterator<IsBuilding<NeutralUnit>, neutral_unit_iterator>
00076           neutral_building_iterator;
00077   typedef boost::transform_iterator<composite_functor<extract_unit_const<NeutralUnit>, extract_pair_second_const<stdext::hash_multimap<BWAPI::UnitType, UnitWrapper<NeutralUnit>>::const_iterator::value_type>>, 
00078                                     stdext::hash_multimap<BWAPI::UnitType, UnitWrapper<NeutralUnit>>::const_iterator> 
00079           neutral_unit_const_iterator;
00080   typedef neutral_unit_const_iterator 
00081           neutral_unit_type_const_iterator;
00082   typedef boost::filter_iterator<IsBuilding<NeutralUnit>, neutral_unit_const_iterator>
00083           neutral_building_const_iterator;
00084 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines