/***************************************************************************************** * * * OpenSpace * * * * Copyright (c) 2014-2021 * * * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * * software and associated documentation files (the "Software"), to deal in the Software * * without restriction, including without limitation the rights to use, copy, modify, * * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * * permit persons to whom the Software is furnished to do so, subject to the following * * conditions: * * * * The above copyright notice and this permission notice shall be included in all copies * * or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * ****************************************************************************************/ namespace openspace::properties { template TemplateProperty::TemplateProperty(Property::PropertyInfo info, T value) : Property(std::move(info)) , _value(std::move(value)) {} template TemplateProperty::operator T() { return _value; } template TemplateProperty::operator T() const { return _value; } template TemplateProperty& TemplateProperty::operator=(T val) { setValue(val); return *this; } template T openspace::properties::TemplateProperty::value() const { return _value; } template void openspace::properties::TemplateProperty::setValue(T val) { if (val != _value) { _value = std::move(val); notifyChangeListeners(); _isValueDirty = true; } } template std::ostream& operator<<(std::ostream& os, const TemplateProperty& obj) { os << obj.value(); return os; } template std::any TemplateProperty::get() const { return std::any(_value); } template void TemplateProperty::set(std::any value) { T v = std::any_cast(std::move(value)); setValue(v); } template const std::type_info& TemplateProperty::type() const { return typeid(T); } template bool TemplateProperty::getLuaValue(lua_State* state) const { toLuaConversion(state); return true; } template bool TemplateProperty::setLuaValue(lua_State* state) { bool success = false; T thisValue = fromLuaConversion(state, success); if (success) { set(std::any(thisValue)); } return success; } template bool TemplateProperty::getStringValue(std::string& outValue) const { outValue = toStringConversion(); return true; } } // namespace openspace::properties