$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r62364 - sandbox/SOC/2010/bits_and_ints/boost/integer/detail
From: muriloufg_at_[hidden]
Date: 2010-05-31 19:24:41
Author: murilov
Date: 2010-05-31 19:24:41 EDT (Mon, 31 May 2010)
New Revision: 62364
URL: http://svn.boost.org/trac/boost/changeset/62364
Log:
(Miscommited) Function bit_reversal, static_bit_reversal template and some utilities declared in integer/detail/utils.hpp done.
Added:
   sandbox/SOC/2010/bits_and_ints/boost/integer/detail/static_bit_reversal.hpp   (contents, props changed)
   sandbox/SOC/2010/bits_and_ints/boost/integer/detail/static_sign_extend.hpp   (contents, props changed)
   sandbox/SOC/2010/bits_and_ints/boost/integer/detail/utils.hpp   (contents, props changed)
Added: sandbox/SOC/2010/bits_and_ints/boost/integer/detail/static_bit_reversal.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/detail/static_bit_reversal.hpp	2010-05-31 19:24:41 EDT (Mon, 31 May 2010)
@@ -0,0 +1,53 @@
+//  Boost integer/detail/static_bit_reversal.hpp header file  ------------------------------//
+
+//  (C) Copyright Murilo Adriano Vasconcelos 2010.
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+
+//  See http://www.boost.org for updates, documentation, and revision history. 
+
+#ifndef BOOST_STATIC_BIT_REVERSAL_INCLUDED
+#define BOOST_STATIC_BIT_REVERSAL_INCLUDED
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits.hpp>
+#include "utils.hpp" // is_bit_set<>
+
+/* 
+ *	Reverses the bits in data in compile-time
+ *	For example if binary representation of data is:
+ *		00000000000010001010101000001111
+ *	static_bit_reversal<type, data>::value is:
+ *		11110000010101010000000000000000
+ */
+
+namespace boost 
+{
+
+// Base container
+template <typename T, T val>
+struct static_bit_reversal_base
+{
+	BOOST_STATIC_CONSTANT(T, value = val);
+};
+
+//	@TODO: shift template parameter 
+//		must not be changeable by user
+template <typename T, T val, std::size_t shift = sizeof(T) * 8>
+struct static_bit_reversal : 
+	public static_bit_reversal_base<T, 
+		((is_bit_set<T, val, (sizeof(T) * 8 - shift)>::value << (shift - 1)) 
+		+ static_bit_reversal<T, val, shift - 1>::value)
+	>
+{};
+
+//	Base case
+template <typename T, T val>
+struct static_bit_reversal<T, val, 0> : 
+	static_bit_reversal_base<T, T(0)> {};
+
+	
+} // boost
+
+#endif
\ No newline at end of file
Added: sandbox/SOC/2010/bits_and_ints/boost/integer/detail/static_sign_extend.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/detail/static_sign_extend.hpp	2010-05-31 19:24:41 EDT (Mon, 31 May 2010)
@@ -0,0 +1,32 @@
+//  Boost integer/detail/static_sign_extend.hpp header file  ------------------------------//
+
+//  (C) Copyright Murilo Adriano Vasconcelos 2010.
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+
+//  See http://www.boost.org for updates, documentation, and revision history. 
+
+#ifndef BOOST_STATIC_SIGN_EXTEND_INCLUDED
+#define BOOST_STATIC_SIGN_EXTEND_INCLUDED
+
+#include <boost/cstdint.hpp> // for intmax_t
+
+namespace boost 
+{
+
+// Compile-time version of sign_extend
+template<typename IntegralType, Raw raw, unsigned B>
+struct static_sign_extend 
+{
+	typedef IntegralType T;
+private:
+    BOOST_STATIC_CONSTANT(T, shift = (T(1) << (B - 1)));
+	BOOST_STATIC_CONSTANT(T, m = ((T(1) << B) - 1));
+public:
+	BOOST_STATIC_CONSTANT(Raw, value = ((raw & m) ^ shift) - shift); 
+}; // boost::static_sign_extend
+
+} // boost
+
+#endif
\ No newline at end of file
Added: sandbox/SOC/2010/bits_and_ints/boost/integer/detail/utils.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/detail/utils.hpp	2010-05-31 19:24:41 EDT (Mon, 31 May 2010)
@@ -0,0 +1,56 @@
+//  Boost integer/detail/utils.hpp header file  ------------------------------//
+
+//  (C) Copyright Murilo Adriano Vasconcelos 2010.
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+
+//  See http://www.boost.org for updates, documentation, and revision history. 
+
+#ifndef BOOST_INTEGER_UTILS_INCLUDED
+#define BOOST_INTEGER_UTILS_INCLUDED
+
+/*
+ *	Some utilities to handle integers.
+ */
+namespace boost
+{
+	
+// Sets the bit `pos' in data
+template <typename T, T data, unsigned char pos>
+struct set_bit
+{
+	BOOST_STATIC_CONSTANT(T, value = data | (T(1) << pos));
+}; // set_bit
+	
+// Clear the bit `pos' in data
+template <typename T, T data, unsigned char pos>
+struct clear_bit
+{
+	BOOST_STATIC_CONSTANT(T, value = data & ~(T(1) << pos));
+}; // clear_bit
+
+// If the bit `pos' is 1 then it will be 0 if not the bit will be 1
+template <typename T, T data, unsigned char pos>
+struct flip_bit
+{
+	BOOST_STATIC_CONSTANT(T, value = data ^ (T(1) << pos));
+}; // flip_bit
+
+// Test if the bit in `pos' positon is set or not
+template <typename T, T data, unsigned char pos>
+struct is_bit_set
+{
+	BOOST_STATIC_CONSTANT(T, value = ((data >> pos) & T(1)) != T(0));
+}; // is_bit_set
+
+// Changes the value of bit in `pos' position
+template <typename T, T data, unsigned char pos, bool state>
+struct modify_bit
+{
+	BOOST_STATIC_CONSTANT(T, value = ((data & ~(T(1) << pos)) | (-state & (T(1) << pos))));
+}; // modify_bit	
+	
+} // boost
+
+#endif
\ No newline at end of file