author | Michael Krelin <hacker@klever.net> | 2007-04-11 19:22:11 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2007-04-11 19:22:11 (UTC) |
commit | a2d909d2ecaaf80e6d0e063f37fa04ed6934c185 (patch) (side-by-side diff) | |
tree | 5f09965678201579c9aacbe2d11db4bc9f930267 /include | |
parent | 4c22006b8012bafccf955c0d077971e67107ac35 (diff) | |
download | konforka-master.zip konforka-master.tar.gz konforka-master.tar.bz2 |
-rw-r--r-- | include/konforka/pointer_map.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/konforka/pointer_map.h b/include/konforka/pointer_map.h index d706e71..00dd486 100644 --- a/include/konforka/pointer_map.h +++ b/include/konforka/pointer_map.h @@ -1,105 +1,106 @@ #ifndef __KONFORKA_POINTER_MAP_H #define __KONFORKA_POINTER_MAP_H #include <typeinfo> /** * @file * @brief mapping of pointers. * * The support for global mapping of pointers. Useful when using third-party * libraries callbacks when the library does not provide mechanism for passing * along custom context-dependent data. */ namespace konforka { + using std::type_info; /** * @brief internally used actual implementation of mapping pointer. * * @param tf the typeid of the key pointer. * @param pf the key pointer. * @param tt the typeid of the value pointer. * @param pt the value pointer. */ void _map_pointer(const type_info& tf,void *pf,const type_info& tt,void *pt); /** * @brief internally used actual implementation of destroying mapped * pointer. * * @param tf the typeid of the key pointer. * @param pf the key pointer. * @param tt the typeid of the value pointer. * @param pt the value pointer. */ void _unmap_pointer(const type_info& tf,void *pf,const type_info& tt,void *pt); /** * @brief internally used actual implementation of retrieving mapped * pointer. * * @param tf the typeid of the key pointer. * @param pf the key pointer. * @param tt the typeid of the value pointer. * @return the value. */ void *_mapped_pointer(const type_info& tf,void *pf,const type_info& tt); /** * @brief the object, maintaining mapped pointer. * * @param from_t the key type. * @param to_t the value type. */ template<typename from_t,typename to_t> class map_pointer { public: /** * stored key. */ from_t _from; /** * stored value. */ to_t _to; /** * flag, specifying that the object is currently mapped. */ bool bmapped; /** * @brief constructs the object, mapping the key/value pair. * * @param f the key. * @param t the value. */ map_pointer(from_t f,to_t t) : _from(f), _to(t), bmapped(false) { _map_pointer(typeid(from_t),_from,typeid(to_t),_to); bmapped=true; } /** * @brief destructor unmaps the key/value pair stored. */ ~map_pointer() { if(bmapped) _unmap_pointer(typeid(from_t),_from,typeid(to_t),_to); } }; /** * The template function for pointer retrieval. * * @param from_t the key type. * @param to_t the value type. * @param f the key. * @return the value. */ template<typename from_t,typename to_t> to_t mapped_pointer(from_t f) { return (to_t)_mapped_pointer(typeid(from_t),f,typeid(to_t)); } } #endif /* __KONFORKA_POINTER_MAP_H */ /* vim:set ft=cpp: */ |