Edit

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

Branch :

  • Show log

    Commit

  • Author : Shannon Woods
    Date : 2014-06-16 13:29:52
    Hash : 3dc8020a
    Message : Fix dependent typename build error on non-MSVC compilers BUG=angle:677 Change-Id: Ic0d257ef41e8c80baeddd664eb6c2cc5db94ee43 Reviewed-on: https://chromium-review.googlesource.com/203428 Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Shannon Woods <shannonwoods@chromium.org>

  • src/common/angleutils.h
  • //
    // Copyright (c) 2002-2014 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.
    //
    
    // angleutils.h: Common ANGLE utilities.
    
    #ifndef COMMON_ANGLEUTILS_H_
    #define COMMON_ANGLEUTILS_H_
    
    #include "common/platform.h"
    
    #include <stddef.h>
    #include <string>
    #include <set>
    
    // A macro to disallow the copy constructor and operator= functions
    // This must be used in the private: declarations for a class
    #define DISALLOW_COPY_AND_ASSIGN(TypeName) \
      TypeName(const TypeName&);               \
      void operator=(const TypeName&)
    
    template <typename T, unsigned int N>
    inline unsigned int ArraySize(T(&)[N])
    {
        return N;
    }
    
    template <typename T, unsigned int N>
    void SafeRelease(T (&resourceBlock)[N])
    {
        for (unsigned int i = 0; i < N; i++)
        {
            SafeRelease(resourceBlock[i]);
        }
    }
    
    template <typename T>
    void SafeRelease(T& resource)
    {
        if (resource)
        {
            resource->Release();
            resource = NULL;
        }
    }
    
    template <typename T>
    void SafeDelete(T*& resource)
    {
        delete resource;
        resource = NULL;
    }
    
    template <typename T>
    void SafeDeleteContainer(T& resource)
    {
        for (typename T::iterator i = resource.begin(); i != resource.end(); i++)
        {
            SafeDelete(*i);
        }
        resource.clear();
    }
    
    template <typename T>
    void SafeDeleteArray(T*& resource)
    {
        delete[] resource;
        resource = NULL;
    }
    
    // Provide a less-than function for comparing structs
    // Note: struct memory must be initialized to zero, because of packing gaps
    template <typename T>
    inline bool StructLessThan(const T &a, const T &b)
    {
        return (memcmp(&a, &b, sizeof(T)) < 0);
    }
    
    // Provide a less-than function for comparing structs
    // Note: struct memory must be initialized to zero, because of packing gaps
    template <typename T>
    inline bool StructEquals(const T &a, const T &b)
    {
        return (memcmp(&a, &b, sizeof(T)) == 0);
    }
    
    template <typename T>
    inline void StructZero(T *obj)
    {
        memset(obj, 0, sizeof(T));
    }
    
    inline const char* MakeStaticString(const std::string &str)
    {
        static std::set<std::string> strings;
        std::set<std::string>::iterator it = strings.find(str);
        if (it != strings.end())
        {
            return it->c_str();
        }
    
        return strings.insert(str).first->c_str();
    }
    
    #if defined(_MSC_VER)
    #define snprintf _snprintf
    #endif
    
    #define VENDOR_ID_AMD 0x1002
    #define VENDOR_ID_INTEL 0x8086
    #define VENDOR_ID_NVIDIA 0x10DE
    
    #define GL_BGRA4_ANGLEX 0x6ABC
    #define GL_BGR5_A1_ANGLEX 0x6ABD
    #define GL_INT_64_ANGLEX 0x6ABE
    #define GL_STRUCT_ANGLEX 0x6ABF
    
    #endif // COMMON_ANGLEUTILS_H_