aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/flext/source/flmap.h
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2004-04-23 22:14:24 +0000
committerThomas Grill <xovo@users.sourceforge.net>2004-04-23 22:14:24 +0000
commitd4b2f09f1c42d49e53c1b039cedc5b09ec8e87cd (patch)
tree6e604c25e7c7ecf147489f82bbfb26bf95db2e2e /externals/grill/flext/source/flmap.h
parentd0b6781beeffe75dad099ed7a6a6d93766c3fa71 (diff)
""
svn path=/trunk/; revision=1634
Diffstat (limited to 'externals/grill/flext/source/flmap.h')
-rw-r--r--externals/grill/flext/source/flmap.h70
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