00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef HxRepositoryTem_h
00012 #define HxRepositoryTem_h
00013
00014 #include "HxIoFwd.h"
00015 #include "HxString.h"
00016 #include "HxRepository.h"
00017 #include "HxRepositoryObserverTem.h"
00018
00019 #pragma warning (disable : 4786)
00020
00021 #include <vector>
00022 #include <map>
00023
00024
00025 template<class T>
00026 class L_HXBASIS HxRepositoryTem : public HxRepository
00027 {
00028 public:
00029 HxRepositoryTem();
00030 HxRepositoryTem(const HxRepositoryObserver&);
00031 HxRepositoryTem(const HxRepositoryObserverTem<T>&);
00032 ~HxRepositoryTem();
00033
00034 virtual void insert(HxString, T&);
00035 virtual T* find(HxString) const;
00036
00037 virtual void remove(HxString name);
00038 virtual void rename(HxString oldName, HxString newName);
00039 virtual int exists(HxString name) const;
00040
00041 virtual HxString generateName(HxString base);
00042
00043 virtual void getNameList(HxStringListBackInserter) const;
00044
00045 virtual void setObserver(const HxRepositoryObserver&);
00046 virtual void setObserver(const HxRepositoryObserverTem<T>&);
00047 virtual const HxRepositoryObserver*
00048 getObserver() const;
00049
00050 virtual STD_OSTREAM& put(STD_OSTREAM&) const;
00051
00052 virtual void clear();
00053
00054 private:
00055 typedef std::map<HxString, T, std::less<HxString> > Map;
00056 typedef Map::value_type Entry;
00057
00058 Map _map;
00059 const HxRepositoryObserverTem<T>* _observer;
00060 HxRepositoryObserverTem<T>* _tmpObserver;
00061 int _id;
00062 };
00063
00064 template<class T>
00065 inline STD_OSTREAM&
00066 operator<<(STD_OSTREAM& os, const HxRepositoryTem<T>& repository)
00067 {
00068 return repository.put(os);
00069 }
00070
00071 #ifdef INC_TEMPLATE_SRC
00072 #include "HxRepositoryTem.c"
00073 #endif
00074
00075 #endif