source: sources/src/bit2string.cc @ 28

Last change on this file since 28 was 27, checked in by buchmann, 16 years ago

SystemCASS now uses autoconf/automake to build the API. Regression tests still
use the old Makefiles.
(thanks to Nicolas Pouillon)

The library directory no longer is "lib-arch-system". The directory now is "lib-linux". Everyone needs to pay attention about SYSTEMCASS environment variable.

Changes:

  • system header includes
  • Add includes to config.h (generated by autoconf/automake)
  • test:
    • linux preprocessor macro instead of _WIN32
    • CONFIG_DEBUG instead of DEBUG

Removes:

  • Makefile
  • guess_endianness.cc
  • guess_os.sh
  • assert.h (we now use standard assert.h)
  • Options.def
File size: 3.2 KB
Line 
1/*------------------------------------------------------------\
2|                                                             |
3| Tool    :                  systemcass                       |
4|                                                             |
5| File    :                 bit2string.cc                     |
6|                                                             |
7| Author  :                 Kingbo Paul-Jerome                |
8|                           Buchmann Richard                  |
9|                                                             |
10| Date    :                   09_07_2004                      |
11|                                                             |
12\------------------------------------------------------------*/
13
14/*
15 * This file is part of the Disydent Project
16 * Copyright (C) Laboratoire LIP6 - Département ASIM
17 * Universite Pierre et Marie Curie
18 *
19 * Home page          : http://www-asim.lip6.fr/disydent
20 * E-mail             : mailto:richard.buchmann@lip6.fr
21 *
22 * This library is free software; you  can redistribute it and/or modify it
23 * under the terms  of the GNU Library General Public  License as published
24 * by the Free Software Foundation; either version 2 of the License, or (at
25 * your option) any later version.
26 *
27 * Disydent is distributed  in the hope  that it  will be
28 * useful, but WITHOUT  ANY WARRANTY; without even the  implied warranty of
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
30 * Public License for more details.
31 *
32 * You should have received a copy  of the GNU General Public License along
33 * with the GNU C Library; see the  file COPYING. If not, write to the Free
34 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
35 */
36
37#include "bit2string.h"
38#include "sc_unit.h"
39#include <cstdarg>
40#include <cstdio>
41#include <cstdlib>
42#include <iostream>
43#ifdef HAVE_CONFIG_H
44#include "config.h"
45#endif
46       
47using namespace std;
48
49namespace sc_core {
50
51static
52void bit2string_64 (char *buf, tab_t *val,int size)
53{
54        typedef sc_dt::s_uint_type<64>::uint_type data_type;
55  data_type tmp=*((data_type*)val);
56        //cout << "tmp = " << tmp << "\n";     
57        buf[size]='\0';
58        for (int i=size-1; i>=0;--i) 
59        {
60                buf[i]=(tmp&1)?'1':'0';
61                tmp>>=1;
62        }
63#if 0
64  cout << buf << "\n"; 
65#endif
66}
67
68static
69void bit2string_32 (char *buf, tab_t *val,int size)
70{
71        typedef sc_dt::s_uint_type<32>::uint_type data_type;
72  data_type tmp=*((data_type*)val);
73        //cout << "tmp = " << tmp << "\n";     
74        buf[size]='\0';
75        for (int i=size-1; i>=0;--i) 
76        {
77                buf[i]=(tmp&1)?'1':'0';
78                tmp>>=1;
79        }
80#if 0
81  cout << buf << "\n"; 
82#endif
83}
84
85void bit2string(char *buf, tab_t *val,int bit_number)
86{
87  if (bit_number > 32)
88  {
89    bit2string_64 (buf, (tab_t*)val, bit_number);
90    return;
91  } else if (bit_number > 16) 
92  {
93    bit2string_32 (buf, (tab_t*)val, bit_number);
94    return;
95  }
96        tab_t tmp=*((tab_t*)val);
97        //cout << "tmp = " << tmp << "\n";     
98        buf[bit_number]='\0';
99        for (int i=bit_number-1; i>=0;--i) 
100        {
101                buf[i]=(tmp&1)?'1':'0';
102                tmp>>=1;
103        }
104       
105}
106
107char * strip (char * buf)
108{
109        int cpt=0;
110        while ( (buf[cpt] == '0') && (buf[cpt+1] != '\0') ) //tant que bit == 0
111                cpt++;
112        return (buf+cpt);
113}
114
115} // end of sc_core namespace
116
Note: See TracBrowser for help on using the repository browser.