From 67638eeec5267977940dce29c5a94ce4d093ed69 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 12 Dec 2016 18:26:16 +0300 Subject: Add constexpr and noexcept into some methods. --- src/gui/color.cpp | 149 ------------------------------------------------------ src/gui/color.h | 83 ++++++++++++++++++++++++++---- 2 files changed, 72 insertions(+), 160 deletions(-) delete mode 100644 src/gui/color.cpp (limited to 'src/gui') diff --git a/src/gui/color.cpp b/src/gui/color.cpp deleted file mode 100644 index 6d0e3037e..000000000 --- a/src/gui/color.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2011-2016 The ManaPlus Developers - * - * This file is part of The ManaPlus Client. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/* _______ __ __ __ ______ __ __ _______ __ __ - * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\ - * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / / - * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / / - * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / / - * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ / - * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/ - * - * Copyright (c) 2004 - 2008 Olof Naessén and Per Larsson - * - * - * Per Larsson a.k.a finalman - * Olof Naessén a.k.a jansem/yakslem - * - * Visit: http://guichan.sourceforge.net - * - * License: (BSD) - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name of Guichan nor the names of its contributors may - * be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * For comments regarding functions please see the header file. - */ - -#include "gui/color.h" - -#include "debug.h" - -Color::Color() : - r(0U), - g(0U), - b(0U), - a(255U) -{ -} - -Color::Color(const unsigned int color) : - r((color >> 16) & 0xFFU), - g((color >> 8) & 0xFFU), - b(color & 0xFFU), - a(255U) -{ -} - -Color::Color(const unsigned int ar, - const unsigned int ag, - const unsigned int ab, - const unsigned int aa) : - r(ar), - g(ag), - b(ab), - a(aa) -{ -} - -Color Color::operator+(const Color& color) const -{ - Color result(r + color.r, - g + color.g, - b + color.b, - 255U); - - result.r = (result.r > 255U ? 255U : result.r); - result.g = (result.g > 255U ? 255U : result.g); - result.b = (result.b > 255U ? 255U : result.b); - - return result; -} - -Color Color::operator-(const Color& color) const -{ - Color result(r - color.r, - g - color.g, - b - color.b, - 255U); - - result.r = (result.r > 255U ? 255U : result.r); - result.g = (result.g > 255U ? 255U : result.g); - result.b = (result.b > 255U ? 255U : result.b); - - return result; -} - -Color Color::operator*(const float value) const -{ - Color result(CAST_U32(static_cast(r) * value), - CAST_U32(static_cast(g) * value), - CAST_U32(static_cast(b) * value), - a); - - result.r = (result.r > 255U ? 255U : result.r); - result.g = (result.g > 255U ? 255U : result.g); - result.b = (result.b > 255U ? 255U : result.b); - - return result; -} - -bool Color::operator==(const Color& color) const -{ - return r == color.r && g == color.g && b == color.b && a == color.a; -} - -bool Color::operator!=(const Color& color) const -{ - return !(r == color.r && g == color.g && b == color.b && a == color.a); -} diff --git a/src/gui/color.h b/src/gui/color.h index ffcf93ce6..c6c3accbc 100644 --- a/src/gui/color.h +++ b/src/gui/color.h @@ -75,7 +75,13 @@ class Color final /** * Constructor. Initializes the color to black. */ - Color(); + constexpr Color() : + r(0U), + g(0U), + b(0U), + a(255U) + { + } /** * Constructor. Constructs a color from the bytes in an integer. @@ -90,7 +96,13 @@ class Color final * * @param color The color to initialise the object with. */ - explicit Color(const unsigned int color); + constexpr Color(const unsigned int color) : + r((color >> 16) & 0xFFU), + g((color >> 8) & 0xFFU), + b(color & 0xFFU), + a(255U) + { + } /** * Constructor. The default alpha value is 255. @@ -101,10 +113,17 @@ class Color final * @param a Alpha, used for transparency. A value of 0 means * totaly transparent, 255 is totaly opaque. */ - Color(const unsigned int r, - const unsigned int g, - const unsigned int b, - const unsigned int a = 255); + constexpr Color(const unsigned int ar, + const unsigned int ag, + const unsigned int ab, + const unsigned int aa = 255) : + r(ar), + g(ag), + b(ab), + a(aa) + { + } + /** * Adds the RGB values of two colors together. The values will be @@ -116,7 +135,19 @@ class Color final * @param color A color to add to this color. * @return The added colors with an alpha value set to 255. */ - Color operator+(const Color& color) const; + constexpr Color operator+(const Color& color) const + { + Color result(r + color.r, + g + color.g, + b + color.b, + 255U); + + result.r = (result.r > 255U ? 255U : result.r); + result.g = (result.g > 255U ? 255U : result.g); + result.b = (result.b > 255U ? 255U : result.b); + + return result; + } /** * Subtracts the RGB values of one color from another. @@ -128,7 +159,19 @@ class Color final * @param color A color to subtract from this color. * @return The subtracted colors with an alpha value set to 255. */ - Color operator-(const Color& color) const; + constexpr Color operator-(const Color& color) const + { + Color result(r - color.r, + g - color.g, + b - color.b, + 255U); + + result.r = (result.r > 255U ? 255U : result.r); + result.g = (result.g > 255U ? 255U : result.g); + result.b = (result.b > 255U ? 255U : result.b); + + return result; + } /** * Multiplies the RGB values of a color with a float value. @@ -139,7 +182,19 @@ class Color final * the add and subtract operations, be multiplied as * well. */ - Color operator*(const float value) const; + constexpr Color operator*(const float value) const + { + Color result(CAST_U32(static_cast(r) * value), + CAST_U32(static_cast(g) * value), + CAST_U32(static_cast(b) * value), + a); + + result.r = (result.r > 255U ? 255U : result.r); + result.g = (result.g > 255U ? 255U : result.g); + result.b = (result.b > 255U ? 255U : result.b); + + return result; + } /** * Compares two colors. @@ -147,7 +202,10 @@ class Color final * @return True if the two colors have the same RGBA components * false otherwise. */ - bool operator==(const Color& color) const; + constexpr bool operator==(const Color& color) const + { + return r == color.r && g == color.g && b == color.b && a == color.a; + } /** * Compares two colors. @@ -155,7 +213,10 @@ class Color final * @return True if the two colors have different RGBA components, * false otherwise. */ - bool operator!=(const Color& color) const; + constexpr bool operator!=(const Color& color) const + { + return !(r == color.r && g == color.g && b == color.b && a == color.a); + } /** * Holds the red color component (range 0-255). -- cgit v1.2.3-70-g09d2