Edit

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

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2015-04-28 12:39:06
    Hash : 1377689c
    Message : Cache validate samplers result. This gives ~23% increase in the validation-only draw call perf test. BUG=angleproject:959 Change-Id: I384a5c4fbb1c2cd47483bd7cf4bc1d39447a99bc Reviewed-on: https://chromium-review.googlesource.com/267750 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Brandon Jones <bajones@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_
    
    template <class T>
    struct Optional
    {
        Optional()
            : mValid(false),
              mValue(T())
        {}
    
        explicit 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;
        }
    
        void reset()
        {
            mValid = false;
        }
    
        static Optional None()
        {
            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_