X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Fpublic-api%2Fmath%2Fuint-16-pair.h;h=e3d9f4993270f68f7e4958646cd9af90020be84e;hb=f24c14c80919972c2f41235f0ed5989d776b14a1;hp=2e802e164b39d83896489f92e6c8c578696ab6bf;hpb=49bf2029ba5c497de3707ad812cb31ad16ca98a5;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/public-api/math/uint-16-pair.h b/dali/public-api/math/uint-16-pair.h index 2e802e1..e3d9f49 100644 --- a/dali/public-api/math/uint-16-pair.h +++ b/dali/public-api/math/uint-16-pair.h @@ -1,8 +1,8 @@ -#ifndef __DALI_UINT_16_PAIR_H__ -#define __DALI_UINT_16_PAIR_H__ +#ifndef DALI_UINT_16_PAIR_H +#define DALI_UINT_16_PAIR_H /* - * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 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. @@ -23,11 +23,12 @@ // INTERNAL INCLUDES #include +#include namespace Dali { /** - * @addtogroup dali-core-math + * @addtogroup dali_core_math * @{ */ @@ -37,27 +38,32 @@ namespace Dali * Use this for integer dimensions and points with limited range such as image * sizes and pixel coordinates where a pair of floating point numbers is * inefficient and illogical (i.e. the data is inherently integer). - * These are immutable. If you want to change a value, make a whole new object. * One of these can be passed in a single 32 bit integer register on * common architectures. + * @SINCE_1_0.0 */ class Uint16Pair { public: /** - * @brief Default constructor for the (0, 0) vector. + * @brief Default constructor for the (0, 0) tuple. + * @SINCE_1_0.0 */ - Uint16Pair() : mData(0) {} + Uint16Pair() + : mData(0) + { + } /** * @brief Constructor taking separate x and y (width and height) parameters. - * @param[in] width The width or X dimension of the vector. Make sure it is less than 65536, - * @param[in] height The height or Y dimension of the vector. Make sure it is less than 65536, + * @SINCE_1_0.0 + * @param[in] width The width or X dimension of the tuple. Make sure it is less than 65536 + * @param[in] height The height or Y dimension of the tuple. Make sure it is less than 65536 */ - Uint16Pair( uint32_t width, uint32_t height ) + Uint16Pair(uint32_t width, uint32_t height) { - DALI_ASSERT_DEBUG( width < ( 1u << 16 ) && "Width parameter not representable." ); - DALI_ASSERT_DEBUG( height < ( 1u << 16 ) && "Height parameter not representable." ); + DALI_ASSERT_DEBUG(width < (1u << 16) && "Width parameter not representable."); + DALI_ASSERT_DEBUG(height < (1u << 16) && "Height parameter not representable."); /* Do equivalent of the code below with one aligned memory access: * mComponents[0] = width; @@ -68,15 +74,19 @@ public: } /** - * @brief Copy constructor. + * @brief Sets the width. + * @SINCE_1_1.13 + * @param[in] width The x dimension to be stored in this 2-tuple */ - Uint16Pair( const Uint16Pair& rhs ) + void SetWidth(uint16_t width) { - mData = rhs.mData; + mComponents[0] = width; } /** - * @returns the x dimension stored in this 2-tuple. + * @brief Get the width. + * @SINCE_1_0.0 + * @return the x dimension stored in this 2-tuple */ uint16_t GetWidth() const { @@ -84,7 +94,19 @@ public: } /** - * @returns the y dimension stored in this 2-tuple. + * @brief Sets the height. + * @SINCE_1_1.13 + * @param[in] height The y dimension to be stored in this 2-tuple + */ + void SetHeight(uint16_t height) + { + mComponents[1] = height; + } + + /** + * @brief Returns the y dimension stored in this 2-tuple. + * @SINCE_1_0.0 + * @return Height */ uint16_t GetHeight() const { @@ -92,15 +114,39 @@ public: } /** - * @returns the x dimension stored in this 2-tuple. + * @brief Sets the x dimension (same as width). + * @SINCE_1_1.14 + * @param[in] x The x dimension to be stored in this 2-tuple + */ + void SetX(uint16_t x) + { + mComponents[0] = x; + } + + /** + * @brief Returns the x dimension stored in this 2-tuple. + * @SINCE_1_0.0 + * @return X */ - uint16_t GetX() const + uint16_t GetX() const { return mComponents[0]; } /** - * @returns the y dimension stored in this 2-tuple. + * @brief Sets the y dimension (same as height). + * @SINCE_1_1.14 + * @param[in] y The y dimension to be stored in this 2-tuple + */ + void SetY(uint16_t y) + { + mComponents[1] = y; + } + + /** + * @brief Returns the y dimension stored in this 2-tuple. + * @SINCE_1_0.0 + * @return Y */ uint16_t GetY() const { @@ -108,69 +154,93 @@ public: } /** - * Equality operator. + * @brief Equality operator. + * @SINCE_1_0.0 + * @param[in] rhs A reference for comparison + * @return True if same */ - bool operator==( const Uint16Pair& rhs ) const + bool operator==(const Uint16Pair& rhs) const { return mData == rhs.mData; } /** - * Inequality operator. + * @brief Inequality operator. + * @SINCE_1_0.0 + * @param[in] rhs A reference for comparison + * @return True if different */ - bool operator!=( const Uint16Pair& rhs ) const + bool operator!=(const Uint16Pair& rhs) const { return mData != rhs.mData; } /** - * Less than comparison operator for storing in collections (not geometrically + * @brief Less than comparison operator for storing in collections (not geometrically * meaningful). + * @SINCE_1_0.0 + * @param[in] rhs A reference for comparison + * @return True if less */ - bool operator<( const Uint16Pair& rhs ) const + bool operator<(const Uint16Pair& rhs) const { return mData < rhs.mData; } /** - * Greater than comparison operator for storing in collections (not + * @brief Greater than comparison operator for storing in collections (not * geometrically meaningful). + * @SINCE_1_0.0 + * @param[in] rhs A reference for comparison + * @return True if greater */ - bool operator>( const Uint16Pair& rhs ) const + bool operator>(const Uint16Pair& rhs) const { return mData > rhs.mData; } /** - * @brief Create an instance by rounding a floating point vector to closest + * @brief Creates an instance by rounding a floating point vector to closest * integers. * * Uses a template for loose coupling, to save a header include, and allow any * vector type with .x and .y members to be converted. + * @SINCE_1_0.0 + * @param[in] from Floating point vector2 + * @return Closest integer value */ template - static Uint16Pair FromFloatVec2( const FLOAT_VECTOR_N_TYPE& from ) + static Uint16Pair FromFloatVec2(const FLOAT_VECTOR_N_TYPE& from) { - DALI_ASSERT_DEBUG( from.x + 0.5f < 65536.0f ); - DALI_ASSERT_DEBUG( from.y + 0.5f < 65536.0f ); - return Uint16Pair( from.x + 0.5f, from.y + 0.5f ); + DALI_ASSERT_DEBUG(from.x + 0.5f < 65536.0f); + DALI_ASSERT_DEBUG(from.y + 0.5f < 65536.0f); + return Uint16Pair(from.x + 0.5f, from.y + 0.5f); } /** - * @brief Create an instance by rounding a floating point array to closest + * @brief Creates an instance by rounding a floating point array to closest * integers. * * Uses a template to allow any vector type with operator [] to be converted * in addition to plain arrays. + * @SINCE_1_0.0 + * @param[in] from Floating point array + * @return Closest integer value */ template - static Uint16Pair FromFloatArray( const FLOAT_ARRAY& from ) + static Uint16Pair FromFloatArray(const FLOAT_ARRAY& from) { - DALI_ASSERT_DEBUG( from[0] + 0.5f < 65536.0f ); - DALI_ASSERT_DEBUG( from[1] + 0.5f < 65536.0f ); - return Uint16Pair( from[0] + 0.5f, from[1] + 0.5f ); + DALI_ASSERT_DEBUG(from[0] + 0.5f < 65536.0f); + DALI_ASSERT_DEBUG(from[1] + 0.5f < 65536.0f); + return Uint16Pair(from[0] + 0.5f, from[1] + 0.5f); } +public: + Uint16Pair(const Uint16Pair&) = default; ///< Default copy constructor + Uint16Pair(Uint16Pair&&) = default; ///< Default move constructor + Uint16Pair& operator=(const Uint16Pair&) = default; ///< Default copy assignment operator + Uint16Pair& operator=(Uint16Pair&&) = default; ///< Default move assignment operator + private: union { @@ -181,9 +251,19 @@ private: }; }; +// Allow Uint16Pair to be treated as a POD type +template<> +struct TypeTraits : public BasicTypes +{ + enum + { + IS_TRIVIAL_TYPE = true + }; +}; + /** * @} */ } // namespace Dali -#endif // __DALI_UINT_16_PAIR_H__ +#endif // DALI_UINT_16_PAIR_H