Edit

kc3-lang/angle/src/common/Optional.h

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2017-04-26 13:45:37
    Hash : 231c7f56
    Message : Apply clang-format to many files. This cleans up the formatting in many places. BUG=None Change-Id: I6c6652ebc042f1f0ffecced53582d09d66b4f384 Reviewed-on: https://chromium-review.googlesource.com/487884 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>

  • src/common/Optional.h
  • //
    // Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // Optional.h:
    //   Represents a type that may be invalid, similar to std::optional.
    //
    
    #ifndef COMMON_OPTIONAL_H_
    #define COMMON_OPTIONAL_H_
    
    #include <utility>
    
    template <class T>
    struct Optional
    {
        Optional() : mValid(false), mValue(T()) {}
    
        Optional(const T &valueIn) : mValid(true), mValue(valueIn) {}
    
        Optional(const Optional &other) : mValid(other.mValid), mValue(other.mValue) {}
    
        Optional &operator=(const Optional &other)
        {
            this->mValid = other.mValid;
            this->mValue = other.mValue;
            return *this;
        }
    
        Optional &operator=(const T &value)
        {
            mValue = value;
            mValid = true;
            return *this;
        }
    
        Optional &operator=(T &&value)
        {
            mValue = std::move(value);
            mValid = true;
            return *this;
        }
    
        void reset() { mValid = false; }
    
        static Optional Invalid() { return Optional(); }
    
        bool valid() const { return mValid; }
        const T &value() const { return mValue; }
    
        bool operator==(const Optional &other) const
        {
            return ((mValid == other.mValid) && (!mValid || (mValue == other.mValue)));
        }
    
        bool operator!=(const Optional &other) const { return !(*this == other); }
    
      private:
        bool mValid;
        T mValue;
    };
    
    #endif  // COMMON_OPTIONAL_H_