X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fbuilder%2Foptional-value.h;h=7a1d9f4be67b78fc24b62be5c51a4053d76eda8f;hp=51421ac81bdf56cf6e835844f2dee5a5b5dd9996;hb=0c862d5823332bc2161c64f901395f2390c82fd2;hpb=e2eda444afbe82e9591fe198eef339227f90a616 diff --git a/dali-toolkit/internal/builder/optional-value.h b/dali-toolkit/internal/builder/optional-value.h index 51421ac..7a1d9f4 100644 --- a/dali-toolkit/internal/builder/optional-value.h +++ b/dali-toolkit/internal/builder/optional-value.h @@ -1,92 +1,130 @@ -#ifndef __DALI_TOOLKIT_INTERNAL_BUILDER_OPTIONAL__ -#define __DALI_TOOLKIT_INTERNAL_BUILDER_OPTIONAL__ +#ifndef DALI_TOOLKIT_INTERNAL_BUILDER_OPTIONAL_H +#define DALI_TOOLKIT_INTERNAL_BUILDER_OPTIONAL_H -// -// Copyright (c) 2014 Samsung Electronics Co., Ltd. -// -// Licensed under the Flora License, Version 1.0 (the License); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://floralicense.org/license/ -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an AS IS BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ -// INTERNAL INCLUDES -template +template struct OptionalTypes { - typedef T ValueType; - typedef const T& ReturnType; - static ReturnType Get(const ValueType& v) { return v; } - static ValueType Set(const ReturnType v) { return v; } - static bool Ok(const ValueType v) { return true; } + typedef T ValueType; + typedef const T& ReturnType; + static ReturnType Get(const ValueType& v) + { + return v; + } + static ValueType Set(const ReturnType v) + { + return v; + } + static bool Ok(const ValueType& v) + { + return true; + } }; -template +template struct OptionalTypes { - typedef T* ValueType; - typedef const T* ReturnType; - static ReturnType Get(const ValueType v) { return v; } - static ValueType Set(const ReturnType v) { return v; } - static bool Ok(const ReturnType v) { return NULL != v; } + typedef T* ValueType; + typedef const T* ReturnType; + static ReturnType Get(const ValueType v) + { + return v; + } + static ValueType Set(const ReturnType v) + { + return v; + } + static bool Ok(const ReturnType v) + { + return NULL != v; + } }; -template +template struct OptionalTypes { - typedef T* ValueType; - typedef const T& ReturnType; - static ReturnType Get(const ValueType v) { return *v; } - static ValueType Set(const ReturnType v) { return &v; } - static bool Ok(const ReturnType v) { return true; } + typedef T* ValueType; + typedef const T& ReturnType; + static ReturnType Get(const ValueType v) + { + return *v; + } + static ValueType Set(const ReturnType v) + { + return &v; + } + static bool Ok(const ReturnType v) + { + return true; + } }; -template +template class OptionalValue { public: - typedef void ( OptionalValue::*bool_type )() const; typedef typename OptionalTypes::ReturnType ReturnType; - typedef typename OptionalTypes::ValueType ValueType; + typedef typename OptionalTypes::ValueType ValueType; - OptionalValue(): mOk(false), mValue() {} - OptionalValue( T value ): mOk(OptionalTypes::Ok(value)), mValue(OptionalTypes::Set(value)) {} - OptionalValue( bool b, T value ): mOk(b), mValue(OptionalTypes::Set(value)) {} - - ReturnType operator *() const { return OptionalTypes::Get(mValue); } - - // safe bool idiom - operator bool_type() const { - return mOk == true ? &OptionalValue::this_type_does_not_support_comparisons : 0; + OptionalValue() + : mOk(false), + mValue() + { + } + OptionalValue(T value) + : mOk(OptionalTypes::Ok(value)), + mValue(OptionalTypes::Set(value)) + { + } + OptionalValue(bool b, T value) + : mOk(b), + mValue(OptionalTypes::Set(value)) + { } - template - bool operator!=( const OT& rhs ) + ReturnType operator*() const { - this->this_type_does_not_support_comparisons(); - return false; + return OptionalTypes::Get(mValue); } - template - bool operator==( const OT& rhs ) + explicit operator bool() const { - this->this_type_does_not_support_comparisons(); - return false; + return mOk; } private: - bool mOk; + bool mOk; ValueType mValue; - void this_type_does_not_support_comparisons() const {} - // todo operator=() ? use OptionalTypes::Ok(mValue) }; +template +bool operator==(const OptionalValue& lhs, const OptionalValue& rhs) +{ + lhs.this_type_does_not_support_comparisons(); + return false; +} + +template +bool operator!=(const OptionalValue& lhs, const OptionalValue& rhs) +{ + lhs.this_type_does_not_support_comparisons(); + return false; +} -#endif // header +#endif // DALI_TOOLKIT_INTERNAL_BUILDER_OPTIONAL_H