Index: trunk/nv/uid.hh
===================================================================
--- trunk/nv/uid.hh	(revision 59)
+++ trunk/nv/uid.hh	(revision 59)
@@ -0,0 +1,43 @@
+// Copyright (C) 2012-2013 ChaosForge / Kornel Kisielewicz
+// http://chaosforge.org/
+//
+// This file is part of NV Libraries.
+// For conditions of distribution and use, see copyright notice in nv.hh
+
+/**
+ * @file uid.hh
+ * @author Kornel Kisielewicz
+ * @brief Implements a unique identifier class manager
+ */
+
+#ifndef NV_UID_HH
+#define NV_UID_HH
+
+#include <nv/common.hh>
+#include <unordered_map>
+
+namespace nv
+{
+	class uid_store
+	{
+	public:
+		uid_store();
+		object* get( uid auid ) const;
+		bool remove( uid auid );
+		void insert( object* o, uid auid );
+		uid insert( object* o );
+		uid request_uid();
+		~uid_store();
+		template< typename T >
+		T* get_as( uid auid ) const 
+		{
+			return dynamic_cast< T* >( get(auid) );
+		}
+	private:
+		typedef std::unordered_map< uid, object* > map;
+		map m_map;
+		uid m_current;
+	};
+}
+
+#endif // NV_UID_HH
Index: trunk/src/uid.cc
===================================================================
--- trunk/src/uid.cc	(revision 59)
+++ trunk/src/uid.cc	(revision 59)
@@ -0,0 +1,52 @@
+// Copyright (C) 2012-2013 ChaosForge / Kornel Kisielewicz
+// http://chaosforge.org/
+//
+// This file is part of NV Libraries.
+// For conditions of distribution and use, see copyright notice in nv.hh
+
+#include "nv/uid.hh"
+
+using namespace nv;
+
+uid_store::uid_store()
+	: m_map(), m_current(0)
+{
+	
+}
+
+object* uid_store::get( uid auid ) const
+{
+	map::const_iterator i = m_map.find( auid );
+	if ( i != m_map.end() )
+	{
+		return i->second;
+	}
+	return nullptr;
+}
+
+bool uid_store::remove( uid auid )
+{
+	return m_map.erase( auid ) != 0;
+}
+
+void uid_store::insert( object* o, uid auid )
+{
+	m_map[ auid ] = o;
+}
+
+uid uid_store::insert( object* o )
+{
+	uid u = request_uid();
+	m_map[ u ] = o;
+	return u;
+}
+
+uid uid_store::request_uid()
+{
+	return ++m_current;
+}
+
+uid_store::~uid_store()
+{
+	// no-op
+}
