#ifndef __SFJP_ROAST__memory__delay_ref_HPP__
#define __SFJP_ROAST__memory__delay_ref_HPP__
+#include <stdio.h>
+
namespace roast
{
+ ////////////////////////////////////////////////////////////////////////////////////
+
+ template <typename T>
+ class delay_ref
+ {
+ private:
+ T* m_ptr;
+ public:
+ delay_ref() : m_ptr(NULL) {}
+ delay_ref(T& ref) : m_ptr(&ref) {}
+ delay_ref(T* ptr) : m_ptr(ptr) {}
+
+ operator T& () { return *m_ptr; }
+ operator const T& () const { return *m_ptr; }
+ T& get() { return *m_ptr; }
+ const T& get() const { return *m_ptr; }
+
+ void set(T& ref){ m_ptr = &ref; }
+ delay_ref operator = (T& ref){ m_ptr = &ref; return *this; }
+ delay_ref operator = (delay_ref& from){ m_ptr = from.m_ptr; return *this; }
+ };
+ ////////////////////////////////////////////////////////////////////////////////////
}
#endif//__SFJP_ROAST__memory__delay_ref_HPP__