#pragma once

namespace cgv {
	namespace data {

class ref_ptr_tag;

/** if you derive your class from this class, a ref_ptr will do reference counting in the inhereted 
    ref_count member. */
class ref_counted
{
private:
	/// keep a mutable reference count to allow ref counted points to const instances
	mutable int ref_count;
protected:
	friend class ref_ptr_tag;
	/// constructor initializes the count to 0
	inline ref_counted() : ref_count(0) {}
	/// write access is also const to allow ref counted pointers to const instances
	inline void set_ref_count(int c) const { ref_count = c; }
public:
	/// read access to current count
	inline int get_ref_count() const { return ref_count; }
};

	}
}