/usr/include/boost/typeof
Edit: /usr/include/boost/typeof/int_encoding.hpp (3348B)
// Copyright (C) 2004 Arkadiy Vertleyb
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_TYPEOF_INT_ENCODING_HPP_INCLUDED
#define BOOST_TYPEOF_INT_ENCODING_HPP_INCLUDED
#include
#include
#include // for std::size_t
namespace boost { namespace type_of {
template struct get_unsigned
{
typedef T type;
};
template<> struct get_unsigned
{
typedef unsigned char type;
};
template<> struct get_unsigned
{
typedef unsigned char type;
};
template<> struct get_unsigned
{
typedef unsigned short type;
};
template<> struct get_unsigned
{
typedef unsigned int type;
};
template<> struct get_unsigned
{
typedef unsigned long type;
};
//////////////////////////
template
struct pack
{
BOOST_STATIC_CONSTANT(std::size_t , value=((n + 1) * 2 + (Overflow ? 1 : 0)));
};
template
struct unpack
{
BOOST_STATIC_CONSTANT(std::size_t, value = (m / 2) - 1);
BOOST_STATIC_CONSTANT(std::size_t, overflow = (m % 2 == 1));
};
////////////////////////////////
template= 0x3fffffff)>
struct encode_size_t : push_back<
V,
boost::type_of::constant::value>
>
{};
template
struct encode_size_t : push_back::value> >::type,
boost::type_of::constant
>
{};
template
struct encode_integral : encode_size_t< V, (typename get_unsigned::type)n,(((typename get_unsigned::type)n)>=0x3fffffff) >
{};
template
struct encode_integral : encode_size_t< V, b?1:0, false>
{};
///////////////////////////
template
struct decode_size_t;
template
struct decode_size_t
{
BOOST_STATIC_CONSTANT(std::size_t,value = n);
typedef Iter iter;
};
template
struct decode_size_t
{
BOOST_STATIC_CONSTANT(std::size_t,m = Iter::type::value);
BOOST_STATIC_CONSTANT(std::size_t,value = (std::size_t)m * 0x3ffffffe + n);
typedef typename Iter::next iter;
};
template
struct decode_integral
{
typedef decode_integral self_t;
BOOST_STATIC_CONSTANT(std::size_t,m = Iter::type::value);
BOOST_STATIC_CONSTANT(std::size_t,n = unpack::value);
BOOST_STATIC_CONSTANT(std::size_t,overflow = unpack::overflow);
typedef typename Iter::next nextpos;
static const T value = (T)(std::size_t)decode_size_t::value;
typedef typename decode_size_t::iter iter;
};
}}//namespace
#endif//BOOST_TYPEOF_INT_ENCODING_HPP_INCLUDED