1// vi:set ft=cpp: -*- Mode: C++ -*- 2/* 3 * (c) 2008-2009 Alexander Warg <warg@os.inf.tu-dresden.de> 4 * economic rights: Technische Universität Dresden (Germany) 5 * 6 * This file is part of TUD:OS and distributed under the terms of the 7 * GNU General Public License 2. 8 * Please see the COPYING-GPL-2 file for details. 9 * 10 * As a special exception, you may use this file as part of a free software 11 * library without restriction. Specifically, if other files instantiate 12 * templates or use macros or inline functions from this file, or you compile 13 * this file and link it with other files to produce an executable, this 14 * file does not by itself cause the resulting executable to be covered by 15 * the GNU General Public License. This exception does not however 16 * invalidate any other reasons why the executable file might be covered by 17 * the GNU General Public License. 18 */ 19 20#pragma once 21 22namespace cxx { namespace arith { 23 24template< unsigned long V > 25struct Ld 26{ 27 enum { value = Ld<V / 2>::value + 1 }; 28}; 29 30template<> 31struct Ld<0> 32{ 33 enum { value = ~0UL }; 34}; 35 36template<> 37struct Ld<1> 38{ 39 enum { value = 0 }; 40}; 41 42}} 43