-- A reference id : object like a string but for reference ids


r2.RefIdMetatable =
{
	__eq = function(op1, op2) return op1.Value == op2.Value end,
	__le = function(op1, op2) return op1.Value <= op2.Value end,
	__lt = function(op1, op2) return op1.Value  < op2.Value end,
	__tostring = function(op) return op.Value end
}



function r2.RefId(value)
	assert(value ~= r2) -- in case of r2:RefId(value)
	if value == nil then value = "" end
	local refId = { Value = tostring(value) }
	setmetatable(refId, r2.RefIdMetatable)
   return refId
end

function r2.isRefId(value)
	return type(value) == "table" and getmetatable(value) == r2.RefIdMetatable
end