From: David Steele Date: Tue, 8 Jan 2019 18:55:59 +0000 (+0000) Subject: Removed unnecessary graphics utility headers X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a0cfbe3ab0e001f21ac719f11a46b49ebe3a78cf;p=platform%2Fcore%2Fuifw%2Fdali-core.git Removed unnecessary graphics utility headers Change-Id: I64842b927942e877057fd976f0a74987373ca9fa --- diff --git a/build/tizen/dali-core/Makefile.am b/build/tizen/dali-core/Makefile.am index aebc53418..663a9288f 100644 --- a/build/tizen/dali-core/Makefile.am +++ b/build/tizen/dali-core/Makefile.am @@ -85,9 +85,7 @@ platformabstractiongraphics_HEADERS = $(graphics_integration_header_files) # Graphics API (Integration) graphicsapidir = $(includedir)/dali/graphics-api -graphicsapiutilitydir = $(includedir)/dali/graphics-api/utility graphicsapi_HEADERS = $(graphics_api_header_files) -graphicsapiutility_HEADERS = $(graphics_api_utility_header_files) #devel api (used by adaptor / toolkit develapidir = $(devincludepath)/dali/devel-api diff --git a/dali/graphics-api/file.list b/dali/graphics-api/file.list index 5fedf73eb..7974da3c1 100644 --- a/dali/graphics-api/file.list +++ b/dali/graphics-api/file.list @@ -25,12 +25,3 @@ graphics_api_header_files = \ $(graphics_api_src_dir)/graphics-api-types-debug.h \ $(graphics_api_src_dir)/graphics-api-types.h \ $(graphics_api_src_dir)/graphics-api-utility.h - -graphics_api_utility_header_files=\ - $(graphics_api_src_dir)/utility/graphics-asserts.h \ - $(graphics_api_src_dir)/utility/utility-builder.h \ - $(graphics_api_src_dir)/utility/utility-memory-pool.h \ - $(graphics_api_src_dir)/utility/utility-queue.h \ - $(graphics_api_src_dir)/utility/utility-strong-type.h \ - $(graphics_api_src_dir)/utility/utility-synchronized.h \ - $(graphics_api_src_dir)/utility/utility-traits.h \ No newline at end of file diff --git a/dali/graphics-api/graphics-api-controller.h b/dali/graphics-api/graphics-api-controller.h index 717f539ba..ecac45a74 100644 --- a/dali/graphics-api/graphics-api-controller.h +++ b/dali/graphics-api/graphics-api-controller.h @@ -34,7 +34,6 @@ #include #include #include -#include namespace Dali { diff --git a/dali/graphics-api/utility/graphics-asserts.h b/dali/graphics-api/utility/graphics-asserts.h deleted file mode 100644 index 5af6829a8..000000000 --- a/dali/graphics-api/utility/graphics-asserts.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef DALI_GRAPHICS_ASSERTS_H -#define DALI_GRAPHICS_ASSERTS_H - -/* - * Copyright (c) 2018 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. - * - */ - -namespace Dali -{ -namespace Graphics -{ -namespace Utility -{ - -template< typename T > -void Assert(bool condition, const T& message) -{ - if(!condition) - { - throw message; - } -} - -template< typename T > -void AssertEqual(const T& lhs, const T& rhs) -{ - Assert(lhs == rhs, "Values are not equal."); -} - -template< typename T > -void AssertLessOrEqual(const T& lhs, const T& rhs) -{ - Assert(lhs <= rhs, "Value must be less or equal."); -} - -template< typename T > -void AssertGraterOrEqual(const T& lhs, const T& rhs) -{ - Assert(lhs >= rhs, "Value must be grater or equal."); -} - -} // namespace Utility -} // namespace Graphics -} // namespace Dali - -#endif // DALI_GRAPHICS_ASSERTS_H diff --git a/dali/graphics-api/utility/utility-builder.h b/dali/graphics-api/utility/utility-builder.h deleted file mode 100644 index b97bd0697..000000000 --- a/dali/graphics-api/utility/utility-builder.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef DALI_GRAPHICS_UTILITY_BUILDER_H -#define DALI_GRAPHICS_UTILITY_BUILDER_H - -/* - * Copyright (c) 2018 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. - * - */ - -// EXTERNAL INCLUDES -#include -#include -#include - -// INTERNAL INCLUDES -#include - -namespace Dali -{ -namespace Graphics -{ -namespace Utility -{ - -template -class Builder -{ -public: - template - Builder( Values&&... values ) : mParameters{} - { - SetParameters( values... ); - } - - template - operator Return() - { - return Build( std::index_sequence_for{} ); - } - - auto Build() - { - return Build( std::index_sequence_for{} ); - } - - template - void Set( V&& value ) - { - SetParameters( std::forward( value ) ); - } - -private: - void SetParameters() const {}; - - template - void SetParameters( V&& value ) - { - std::get>( mParameters ) = std::forward( value ); - } - - template - void SetParameters( Head&& head, Tail&&... tail ) - { - SetParameters( std::forward( head ) ); - SetParameters( std::forward( tail... ) ); - } - - template - T Build( std::index_sequence ) - { - return T(std::move(std::get( mParameters ) )...); - } - -private: // data - std::tuple mParameters; -}; - -} // namespace Utility -} // namespace Graphics -} // namespace Dali - -#endif // DALI_GRAPHICS_UTILITY_BUILDER_H diff --git a/dali/graphics-api/utility/utility-memory-pool.h b/dali/graphics-api/utility/utility-memory-pool.h deleted file mode 100644 index 2758cbd13..000000000 --- a/dali/graphics-api/utility/utility-memory-pool.h +++ /dev/null @@ -1,166 +0,0 @@ -#ifndef DALI_VULKAN_161117_UTILITY_MEMORY_POOL_H -#define DALI_VULKAN_161117_UTILITY_MEMORY_POOL_H - -#include -#include -#include - -namespace Dali -{ -namespace Graphics -{ -namespace Utility -{ -class MemoryPool -{ -public: - static const auto ALIGNMENT = 16u; - - MemoryPool( uint32_t capacity, bool isFixed = false ) - : mPageCapacity( capacity ), - mCapacity( 0 ), - mMarkedPageIndex( 0 ), - mMarkedOffset( 0 ), - mMarkedAllocationSize( 0 ), - mMarkedAllocationCount( 0 ), - mPageOffset( 0 ), - mPageIndex( 0 ), - mPages(), - mTotalPoolCapacity( 0 ), - mTotalPoolAllocationsSize( 0 ), - mTotalPoolAllocations( 0 ), - mIsFixed( isFixed ) - { - } - - ~MemoryPool() - { - if( !mPages.empty() ) - { - mPages.clear(); - } - } - - void Mark() - { - mMarkedOffset = mPageOffset; - mMarkedPageIndex = mPageIndex; - mMarkedAllocationCount = mTotalPoolAllocations; - mMarkedAllocationSize = mTotalPoolAllocationsSize; - } - - void Rollback() - { - mPageOffset = mMarkedOffset; - mPageIndex = mMarkedPageIndex; - mTotalPoolAllocationsSize = mMarkedAllocationSize; - mTotalPoolAllocations = mMarkedAllocationCount; - } - - void RollbackAll() - { - mPageOffset = 0; - mPageIndex = 0; - mTotalPoolAllocationsSize = 0; - mTotalPoolAllocations = 0; - } - - void* Allocate( uint32_t size, uint32_t aligned = ALIGNMENT ) - { - // if allocated size is more that page capacity, add a page of required size - if( size > mPageCapacity ) - { - AddPage( size + ( aligned * 2 ) ); - } - else if( mPageCapacity <= mPageOffset + size + aligned ) - { - AddPage( mPageCapacity ); - } - - mPageOffset = ( ( mPageOffset + aligned ) / aligned ) * aligned; - auto retval = &mPages[mPageIndex].data[mPageOffset]; - mPageOffset += size + aligned; - - mTotalPoolAllocations++; - mTotalPoolAllocationsSize += size; - - return retval; - } - - template - T* AllocateNew( Args... args ) - { - return new( Allocate( sizeof( T ), ALIGNMENT ) ) T( args... ); - } - - template - T* Allocate( uint32_t elements ) - { - return new( Allocate( sizeof( T ) * elements ) ) T[elements]; - } - - /** - * Trims unused memory - */ - void Trim() - { - if( mPageIndex < mPages.size() - 1 ) - { - mPages.resize( mPageIndex + 1 ); - } - } - -private: - void AddPage( uint32_t pageCapacity ) - { - mPages.emplace_back( pageCapacity ); - mPageIndex = uint32_t( mPages.size() - 1u ); - mPageOffset = 0u; - mTotalPoolCapacity += pageCapacity; - } - -public: - //private: - - struct Page - { - Page() = default; - Page( uint32_t _capacity ) : data( nullptr ), capacity( _capacity ) - { - } - - ~Page() - { - if( data ) - { - free(data); - } - } - char* data { nullptr }; - uint32_t capacity { 0u }; - }; - - uint32_t mPageCapacity; - uint32_t mCapacity; - - uint32_t mMarkedPageIndex; - uint32_t mMarkedOffset; - uint32_t mMarkedAllocationSize; - uint32_t mMarkedAllocationCount; - - uint32_t mPageOffset; - uint32_t mPageIndex; - - std::vector mPages; - - uint32_t mTotalPoolCapacity; - uint32_t mTotalPoolAllocationsSize; - uint32_t mTotalPoolAllocations; - - bool mIsFixed; -}; -} // namespace Utility -} // namespace Graphics -} // namespace Dali - -#endif //DALI_VULKAN_161117_UTILITY_MEMORY_POOL_H diff --git a/dali/graphics-api/utility/utility-queue.h b/dali/graphics-api/utility/utility-queue.h deleted file mode 100644 index a31f0ed0b..000000000 --- a/dali/graphics-api/utility/utility-queue.h +++ /dev/null @@ -1,288 +0,0 @@ -#ifndef DALI_GRAPHICS_UTILITY_QUEUE_H -#define DALI_GRAPHICS_UTILITY_QUEUE_H - -/* - * Copyright (c) 2018 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. - * - */ - -// EXTERNAL INCLUDES -#include -#include -#include -#include - -#include - -namespace Dali -{ -namespace Graphics -{ -namespace Utility -{ - -/** - * @brief Queue implementation - */ -template -class Queue -{ -public: - Queue() : Queue(0, nullptr, nullptr, nullptr) - { - } - - Queue(const Queue&) = delete; - Queue& operator=(const Queue&) = delete; - - Queue(Queue&& queue) : Queue() - { - Swap(queue); - } - - Queue& operator=(Queue&& queue) - { - if(this != &queue) - { - Queue(queue).Swap(*this); - } - return *this; - } - - virtual ~Queue() - { - Resize(0); - } - - using Iterator = T*; - - constexpr const Iterator Head() const noexcept - { - return mHead; - } - - constexpr const Iterator Tail() const noexcept - { - return mTail; - } - - template< typename U > - void Enqueue(U&& element) - { - EnqueueEmplace(std::forward< U >(element)); - } - - template< typename... Args > - void EnqueueEmplace(Args&&... args) - { - IncreaseCapacity(); - new(mTail) T(std::forward< Args >(args)...); - mTail = Inc(mTail); - } - - /** - * @brief Pop element at Head() - */ - T Dequeue() - { - if(!mBufferSize){ - throw "Queue is empty!"; - } - - auto result = std::move(*mHead); - mHead->~T(); - mHead = Inc(mHead); - - DecreaseCapacity(); - - return result; - } - - constexpr size_t Count() const noexcept - { - return mHead <= mTail ? mTail - mHead : mBufferSize - (mHead - mTail); - } - - constexpr size_t GetCapacity() const noexcept - { - return mBufferSize ? mBufferSize - 1 : 0; - } - - void SetCapacity(size_t capacity) - { - Resize(capacity ? capacity + 1 : 0); - } - -private: - static constexpr auto MIN_PREFERED_BLOCK_SIZE = size_t{1024}; - static constexpr auto MIN_BUFFER_SIZE = MIN_PREFERED_BLOCK_SIZE / sizeof(T); - - /** - * @brief Increase a pointer to a queue element, wrapping around at the end - */ - constexpr T* Inc(T* pointer) const noexcept - { - return ++pointer == mBuffer + mBufferSize ? mBuffer : pointer; - } - - size_t MoveData(T* from, T* to, T* destination, size_t max) - { - auto count = size_t{}; - while(from < to && count++ < max) - { - // move the object to the new memory - new(destination++) T(std::move(*from)); - from++->~T(); - } - return count; - } - - void CallDeleter(T* from, T* to) - { - AssertLessOrEqual(from, to); - while(from < to) - { - from++->~T(); - } - } - - void IncreaseCapacity() - { - // There must always be an empty element - // If we are about to reach buffer size duplicate the size of the buffer - if(Count() + 1 >= mBufferSize) - { - Resize(mBufferSize ? mBufferSize * 2 : MIN_BUFFER_SIZE); - } - } - - void DecreaseCapacity() - { - auto count = Count(); - - // If empty resize to zero - if(count == 0) - { - Resize(0); - } - else - { - auto newSize = Count() + 1; - auto doubleSize = newSize * 2; - - // There must always be an empty element - // If capacity is double of what it is required resize it - if(doubleSize <= mBufferSize && newSize >= MIN_BUFFER_SIZE) - { - Resize(newSize); - } - } - } - - void Resize(size_t newBufferSize) - { - if(newBufferSize == mBufferSize) - { - return; - } - - auto oldBufferSize = mBufferSize; - auto oldBuffer = mBuffer; - - mBufferSize = newBufferSize; - if(mBufferSize) - { - mBuffer = (T*)new Storage[mBufferSize]; - } - else - { - mBuffer = nullptr; - } - - if(mBufferSize && mHead != mTail) - { - auto totalCopied = ptrdiff_t{}; - - if(mHead < mTail) - { - totalCopied = MoveData(mHead, mTail, mBuffer, mBufferSize - 1); - CallDeleter(mHead + totalCopied, mTail); - } - else - { - auto part1 = oldBufferSize - (oldBuffer - mHead); - auto copied1 = MoveData(mHead, mHead + part1, mBuffer, mBufferSize - 1); - totalCopied += copied1; - if(copied1 == part1) - { - auto copied2 = MoveData(oldBuffer, mTail, mBuffer + part1, mBufferSize - part1 - 1); - CallDeleter(oldBuffer + copied2, mTail); - totalCopied += copied2; - } - else - { - CallDeleter(mHead + copied1, mHead + part1); - } - } - mHead = mBuffer; - mTail = mHead + totalCopied; - } - else - { - if(mHead <= mTail) - { - CallDeleter(mHead, mTail); - } - else - { - CallDeleter(oldBuffer, mTail); - CallDeleter(mHead, oldBuffer + oldBufferSize); - } - mTail = mHead = mBuffer; - } - if(oldBuffer) - { - delete[] (Storage*)oldBuffer; - } - } - -private: - void Swap(Queue& queue) - { - std::swap(mBufferSize, queue.mBufferSize); - std::swap(mBuffer, queue.mBuffer); - std::swap(mHead, queue.mHead); - std::swap(mTail, queue.mTail); - } - - Queue(size_t bufferSize, T* buffer, T* head, T* tail) - : mBufferSize(bufferSize), mBuffer(buffer), mHead(head), mTail(tail) - { - } - - // Correct type to hold the data type without initialising it - using Storage = typename std::aligned_storage::type; - - size_t mBufferSize; ///< Size of the buffer allocated - T* mBuffer; ///< Pointer to the buffer allocated - T* mHead; ///< Pointer to the Head element in the buffer - T* mTail; ///< Pointer to the Tail element in the buffer -}; - -} // namespace Utility -} // namespace Graphics -} // namespace Dali - -#endif // DALI_GRAPHICS_UTILITY_QUEUE_H diff --git a/dali/graphics-api/utility/utility-strong-type.h b/dali/graphics-api/utility/utility-strong-type.h deleted file mode 100644 index 4c74dfe53..000000000 --- a/dali/graphics-api/utility/utility-strong-type.h +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef DALI_GRAPHICS_UTILITY_STRONG_TYPE_H -#define DALI_GRAPHICS_UTILITY_STRONG_TYPE_H - -/* - * Copyright (c) 2018 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. - * - */ - -// EXTERNAL INCLUDES -#include -#include - -namespace Dali -{ -namespace Graphics -{ -namespace Utility -{ - -/** - * @brief Type wrapper to enforce scemantics in other types - */ -template -class StrongType final -{ -public: - explicit StrongType( T value ) noexcept : mValue( std::move( value ) ) - { - } - - StrongType() = default; - - const T& Get() const noexcept - { - return mValue; - } - - T& Get() noexcept - { - return mValue; - } - - const T& operator*() const noexcept - { - return mValue; - } - - T& operator*() noexcept - { - return mValue; - } - -private: - T mValue; -}; - -template -std::ostream& operator<<( std::ostream& os, const StrongType& value ) -{ - os << value.Get(); - return os; -} - -} // namespace Utility -} // namespace Graphics -} // namespace Dali - -#endif // DALI_GRAPHICS_UTILITY_STRONG_TYPE_H \ No newline at end of file diff --git a/dali/graphics-api/utility/utility-synchronized.h b/dali/graphics-api/utility/utility-synchronized.h deleted file mode 100644 index b22b03cf5..000000000 --- a/dali/graphics-api/utility/utility-synchronized.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef DALI_GRAPHICS_SYNCHRONIZED_H -#define DALI_GRAPHICS_SYNCHRONIZED_H - -/* - * Copyright (c) 2018 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. - * - */ - -// EXTERNAL INCLUDES -#include -#include -#include -#include - -namespace Dali -{ -namespace Graphics -{ -namespace Utility -{ -/** - * @brief Class that encapsulates object for thread-safe access - */ -template < typename T > -class Synchronized final -{ -public: - template < typename... Args > - Synchronized( Args... args ) - : mMutex(std::make_unique()), - mObject( std::forward< Args >( args )... ) - { - } - - Synchronized( const Synchronized& ) = delete; - Synchronized& operator=( const Synchronized& ) = delete; - Synchronized( Synchronized&& ) = default; - Synchronized& operator=( Synchronized&& ) = default; - virtual ~Synchronized() = default; - - /** - * @brief Handle to access the data in the Synchronized object - */ - class Handle final - { - public: - Handle(const Handle&) = delete; - Handle& operator=(const Handle&) = delete; - Handle(Handle&&) = default; - Handle& operator=(Handle&&) = default; - ~Handle() - { - mMutex.unlock(); - } - - T& operator*() - { - return mObjectRef; - } - - const T& operator*() const - { - return mObjectRef; - } - - T& operator->() - { - return mObjectRef; - } - - const T& operator->() const - { - return mObjectRef; - } - - T* operator&() - { - return &mObjectRef; - } - - const T* operator&() const - { - return &mObjectRef; - } - - private: - friend Synchronized; //< Allow Synchronized to create a handle - Handle( std::mutex& mutex, T& object ) - : mMutex( mutex ), - mObjectRef( object ) - { - mMutex.lock(); - } - - std::mutex& mMutex; - T& mObjectRef; - }; - - Handle Lock() { - return Handle(*mMutex, mObject); - } - -private: - std::unique_ptr< std::mutex > mMutex; //< Mutex to guard access to the object - T mObject; //< Memeber object that stores the data -}; - -template < typename T, typename... Args > -Synchronized< T > MakeSynchronized( Args... args ) -{ - return Synchronized< T >( std::forward< Args >( args )... ); -} - -} // namespace Utility -} // namespace Graphics -} // namespace Dali - -#endif //DALI_GRAPHICS_SYNCHRONIZED_H \ No newline at end of file diff --git a/dali/graphics-api/utility/utility-traits.h b/dali/graphics-api/utility/utility-traits.h deleted file mode 100644 index 6343a3e91..000000000 --- a/dali/graphics-api/utility/utility-traits.h +++ /dev/null @@ -1,92 +0,0 @@ -#ifndef DALI_GRAPHICS_UTILITY_TRAITS_H -#define DALI_GRAPHICS_UTILITY_TRAITS_H - -/* - * Copyright (c) 2018 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. - * - */ - -// EXTERNAL INCLUDES -#include -#include - -namespace Dali -{ -namespace Graphics -{ -namespace Utility -{ - -template -struct BasicType -{ - using StorageT = T; - using AccessT = T; - using ValueT = T; -}; - -template -struct ComplexType -{ - using StorageT = T; - using AccessT = const T&; - using ValueT = T; -}; - -template class Ptr, typename...Ts> -struct SmartPointerType -{ - using StorageT = Ptr; - using AccessT = T&; - using ValueT = T; -}; - -// Default types -template struct TraitsType : ComplexType {}; - -// Pointer types -template -struct TraitsType> : SmartPointerType -{ -}; -template -struct TraitsType> : SmartPointerType -{ -}; - -// Basic types -template<> struct TraitsType : BasicType { }; -template<> struct TraitsType : BasicType { }; -template<> struct TraitsType : BasicType { }; -template<> struct TraitsType : BasicType { }; -template<> struct TraitsType : BasicType { }; -template<> struct TraitsType : BasicType { }; -template<> struct TraitsType : BasicType { }; -template<> struct TraitsType : BasicType { }; -template<> struct TraitsType : BasicType { }; -template<> struct TraitsType : BasicType { }; - -// Invalid tyoes - -template struct TraitsType {}; -template struct TraitsType {}; -template struct TraitsType {}; -template struct TraitsType {}; - -} // namespace Utility -} // namespace Graphics -} // namespace Dali - -#endif // DALI_GRAPHICS_UTILITY_TRAITS_H \ No newline at end of file