#pragma once

#include "oo.qh"

CLASS(Lazy, Object)
	ATTRIB(Lazy, m_get, entity());
	CONSTRUCTOR(Lazy, entity() _compute)
	{
		this.m_get = _compute;
	}
ENDCLASS(Lazy)

#define LAZY(id) __lazy_##id
#define LAZY_NEW(id, compute) \
	entity LAZY(id)() \
	{ \
		static bool done; \
		static entity it; \
		if (!done) \
		{ \
			it = compute; \
			done = true; \
		} \
		return it; \
	}
