diff options
Diffstat (limited to 'externals/grill/flext/source/flmap.h')
-rw-r--r-- | externals/grill/flext/source/flmap.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/externals/grill/flext/source/flmap.h b/externals/grill/flext/source/flmap.h new file mode 100644 index 00000000..b32b2652 --- /dev/null +++ b/externals/grill/flext/source/flmap.h @@ -0,0 +1,70 @@ +/* + +flext - C++ layer for Max/MSP and pd (pure data) externals + +Copyright (c) 2001-2004 Thomas Grill (xovo@gmx.net) +For information on usage and redistribution, and for a DISCLAIMER OF ALL +WARRANTIES, see the file, "license.txt," in this distribution. + +*/ + +/*! \file flmap.h + \brief special map class for all 32-bit key/value-pairs +*/ + +#ifndef __FLMAP_H +#define __FLMAP_H + +#include <map> + +/*! \defgroup FLEXT_SUPPORT Flext support classes + @{ +*/ + +//! Base class for maps +class AnyMap: + public std::map<unsigned int,unsigned int> +{ + typedef std::map<unsigned int,unsigned int> Parent; +public: + AnyMap(); + ~AnyMap(); + iterator find(unsigned int k); + unsigned int &operator [](unsigned int k); + + typedef std::pair<unsigned int,unsigned int> pair; +}; + +//! Specialized map class for any 32-bit key/value types +template <class K,class T> +class DataMap: + public AnyMap +{ +public: + class iterator: + public AnyMap::iterator + { + public: + iterator() {} + iterator(AnyMap::iterator it): AnyMap::iterator(it) {} + + inline K &key() const { return *(K *)&((*this)->first); } + inline T &data() const { return *(T *)&((*this)->second); } + }; + + class pair: + public AnyMap::pair + { + public: + inline K &key() const { return *(K *)&first; } + inline T &data() const { return *(T *)&second; } + }; + + inline iterator find(K k) { return AnyMap::find(*(unsigned int *)&k); } + inline T &operator [](K k) { return *(T *)&(AnyMap::operator [](*(unsigned int *)&k)); } + inline void erase(K k) { AnyMap::erase(*(unsigned int *)&k); } +}; + +//! @} // FLEXT_SUPPORT + +#endif |