diff --git a/code/Common/Maybe.h b/code/Common/Maybe.h index 3eb2e1d979b2f6f5a7e196ff7f6a36acb9e589c1..b23865b864a447a76d367d5ca40a0a3153d1e2af 100644 --- a/code/Common/Maybe.h +++ b/code/Common/Maybe.h @@ -1,29 +1,89 @@ +/* +Open Asset Import Library (assimp) +---------------------------------------------------------------------- + +Copyright (c) 2006-2022, assimp team + +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the +following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* 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. + +* Neither the name of the assimp team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the assimp team. + +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. + +---------------------------------------------------------------------- +*/ #pragma once + #include <assimp/ai_assert.h> +namespace Assimp { + +/// @brief This class implements an optional type +/// @tparam T The type to store. template <typename T> struct Maybe { -private: - T _val; - bool _valid; - -public: - Maybe() : - _valid(false) {} + /// @brief + Maybe() = default; + /// @brief + /// @param val explicit Maybe(const T &val) : - _val(val), _valid(true) { - } + _val(val), _valid(true) {} + /// @brief Validate the value + /// @return true if valid. operator bool() const { return _valid; } + /// @brief Will assign a value. + /// @param v The new valid value. + void Set(T &v) { + ai_assert(!_valid); + + _valid = true; + _val = v; + } + + /// @brief Will return the value when it is valid. + /// @return The value. const T &Get() const { ai_assert(_valid); return _val; } -private: Maybe &operator&() = delete; + Maybe(const Maybe &) = delete; + +private: + T _val; + bool _valid = false; }; + +} // namespace Assimp diff --git a/code/Common/simd.h b/code/Common/simd.h index 0a062a248c21377760ce9ede4143e0cbcde627c6..a1d9366293229018a491372123cbab940151b3b5 100644 --- a/code/Common/simd.h +++ b/code/Common/simd.h @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2022, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 5c87dabbe8760c99db855a9e07763208bb1e1e79..87a5ebadbfe2a6e496f11c83f4f4952107d30a71 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -89,6 +89,7 @@ SET( COMMON unit/utProfiler.cpp unit/utSharedPPData.cpp unit/utStringUtils.cpp + unit/Common/utMaybe.cpp unit/Common/utMesh.cpp unit/Common/utStandardShapes.cpp unit/Common/uiScene.cpp diff --git a/test/unit/Common/utMaybe.cpp b/test/unit/Common/utMaybe.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9de300290ff92d526a36b31c2d51b9803a063cba --- /dev/null +++ b/test/unit/Common/utMaybe.cpp @@ -0,0 +1,54 @@ +/* +--------------------------------------------------------------------------- +Open Asset Import Library (assimp) +--------------------------------------------------------------------------- + +Copyright (c) 2006-2022, assimp team + +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following +conditions are met: + +* Redistributions of source code must retain the above +copyright notice, this list of conditions and the +following disclaimer. + +* 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. + +* Neither the name of the assimp team, nor the names of its +contributors may be used to endorse or promote products +derived from this software without specific prior +written permission of the assimp team. + +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. +--------------------------------------------------------------------------- +*/ + +#include "UnitTestPCH.h" +#include "Common/Maybe.h" + +using namespace Assimp; + +class utMaybe : public ::testing::Test { + // empty +}; + +TEST_F(utMaybe, creationTest) { + Maybe<int> first(1); + EXPECT_EQ(first.Get(), 1); +}