]> Dogcows Code - chaz/yoink/blobdiff - src/singleton.hh
big batch of progress
[chaz/yoink] / src / singleton.hh
index 9cbb385b2b0340f66c57afd6ee94c284b76db65d..ec0d01e9997fbce426c4f41a460e00540f81c66f 100644 (file)
 #include <stdexcept>
 
 
+namespace dc {
+
+
 template <typename T>
 class singleton
 {
-       static T* ptr;
+       static T* ptr_;
 
 public:
+       struct exception : public std::runtime_error
+       {
+               explicit exception(const std::string& what_arg) :
+                       std::runtime_error(what_arg) {}
+       };
+
        singleton()
        {
-               if (!ptr)
+               if (!ptr_)
                {
                        // This hack is from Game Programming Gems.
                        long long offset = (long long)(T*)1 - (long long)(singleton<T>*)(T*)1;
-                       ptr = (T*)((long long)this + offset);
+                       ptr_ = (T*)((long long)this + offset);
                }
        }
        ~singleton()
        {
                long long offset = (long long)(T*)1 - (long long)(singleton<T>*)(T*)1;
-               if (ptr == (T*)((long long)this + offset))
+               if (ptr_ == (T*)((long long)this + offset))
                {
-                       ptr = 0;
+                       ptr_ = 0;
                }
        }
 
        static T& instance()
        {
-               if (!ptr)
+               if (!ptr_)
                {
-                       throw std::runtime_error("accessing uninstantiated singleton");
+                       throw exception("accessing uninstantiated singleton");
                }
-               return *ptr;
+               return *ptr_;
        }
 
-       static T* instancePtr()
+       static T* instance_ptr()
        {
-               return ptr;
+               return ptr_;
        }
 };
 
-template <typename T> T* singleton<T>::ptr = 0;
+template <typename T> T* singleton<T>::ptr_ = 0;
+
 
+} // namespace dc
 
 #endif // _SINGLETON_HH_
 
+/** vim: set ts=4 sw=4 tw=80: *************************************************/
+
This page took 0.021427 seconds and 4 git commands to generate.