Edit

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

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2017-09-01 16:37:53
    Hash : 6ab833ad
    Message : Add more comparators to Optional.h. BUG=angleproject:1387 Change-Id: If3fc67f99716b2e5e6a8b0ffd139a07a06cdcab8 Reviewed-on: https://chromium-review.googlesource.com/648050 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); }
    
        bool operator==(const T &value) const { return mValid && (mValue == value); }
    
        bool operator!=(const T &value) const { return !(*this == value); }
    
      private:
        bool mValid;
        T mValue;
    };
    
    #endif  // COMMON_OPTIONAL_H_