[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/2php/cefpython/cefpython52/src/include/base/cef_template_util.h [Back]  [Original]

// Copyright (c) 2014 Marshall A. Greenblatt. Portions copyright (c) 2011
// Google Inc. All rights reserved.
//
// Redistribution and use 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 Google Inc. nor the name Chromium Embedded
// Framework nor the names of its contributors may be used to endorse
// or promote products derived from this software without specific prior
// written permission.
//
// 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.

#ifndef CEF_INCLUDE_BASE_CEF_TEMPLATE_UTIL_H_
#define CEF_INCLUDE_BASE_CEF_TEMPLATE_UTIL_H_
#pragma once

#if defined(BASE_TEMPLATE_UTIL_H_)
// Do nothing if the Chromium header has already been included.
// This can happen in cases where Chromium code is used directly by the
// client application. When using Chromium code directly always include
// the Chromium header first to avoid type conflicts.
#elif defined(USING_CHROMIUM_INCLUDES)
// When building CEF include the Chromium header directly.
#include "base/template_util.h"
#else  // !USING_CHROMIUM_INCLUDES
// The following is substantially similar to the Chromium implementation.
// If the Chromium implementation diverges the below implementation should be
// updated to match.

#include   // For size_t.

#include "include/base/cef_build.h"

namespace base {

// template definitions from tr1

template
struct integral_constant {
  static const T value = v;
  typedef T value_type;
  typedef integral_constant type;
};

template  const T integral_constant::value;

typedef integral_constant true_type;
typedef integral_constant false_type;

template  struct is_pointer : false_type {};
template  struct is_pointer : true_type {};

// Member function pointer detection up to four params. Add more as needed
// below. This is built-in to C++ 11, and we can remove this when we switch.
template
struct is_member_function_pointer : false_type {};

template 
struct is_member_function_pointer : true_type {};
template 
struct is_member_function_pointer : true_type {};

template 
struct is_member_function_pointer : true_type {};
template 
struct is_member_function_pointer : true_type {};

template 
struct is_member_function_pointer : true_type {};
template 
struct is_member_function_pointer : true_type {};

template 
struct is_member_function_pointer : true_type {};
template 
struct is_member_function_pointer : true_type {};

template 
struct is_member_function_pointer : true_type {};
template 
struct is_member_function_pointer : true_type {};


template  struct is_same : public false_type {};
template  struct is_same : true_type {};

template struct is_array : public false_type {};
template struct is_array : public true_type {};
template struct is_array : public true_type {};

template  struct is_non_const_reference : false_type {};
template  struct is_non_const_reference : true_type {};
template  struct is_non_const_reference : false_type {};

template  struct is_const : false_type {};
template  struct is_const : true_type {};

template  struct is_void : false_type {};
template  struct is_void : true_type {};

namespace cef_internal {

// Types YesType and NoType are guaranteed such that sizeof(YesType) <
// sizeof(NoType).
typedef char YesType;

struct NoType {
  YesType dummy[2];
};

// This class is an implementation detail for is_convertible, and you
// don't need to know how it works to use is_convertible. For those
// who care: we declare two different functions, one whose argument is
// of type To and one with a variadic argument list. We give them
// return types of different size, so we can use sizeof to trick the
// compiler into telling us which function it would have chosen if we
// had called it with an argument of type From.  See Alexandrescu's
// _Modern C++ Design_ for more details on this sort of trick.

struct ConvertHelper {
  template 
  static YesType Test(To);

  template 
  static NoType Test(...);

  template 
  static From& Create();
};

// Used to determine if a type is a struct/union/class. Inspired by Boost's
// is_class type_trait implementation.
struct IsClassHelper {
  template 
  static YesType Test(void(C::*)(void));

  template 
  static NoType Test(...);
};

}  // namespace cef_internal

// Inherits from true_type if From is convertible to To, false_type otherwise.
//
// Note that if the type is convertible, this will be a true_type REGARDLESS
// of whether or not the conversion would emit a warning.
template 
struct is_convertible
    : integral_constant {
};

template 
struct is_class
    : integral_constant {
};

template
struct enable_if {};

template
struct enable_if { typedef T type; };

}  // namespace base

#endif  // !USING_CHROMIUM_INCLUDES

#endif  // CEF_INCLUDE_BASE_CEF_TEMPLATE_UTIL_H_

Web Proxy Viewer  |  New URL  |  Original Page