source: sources/src/sc_numrep.h @ 60

Last change on this file since 60 was 59, checked in by meunier, 8 years ago
  • Fixed memory leaks
  • Fixed indentation in some files
File size: 2.7 KB
Line 
1/*------------------------------------------------------------\
2|                                                             |
3| Tool    :                  systemcass                       |
4|                                                             |
5| File    :                 sc_numrep.h                       |
6|                                                             |
7| Author  :                 Buchmann Richard                  |
8|                                                             |
9| Date    :                   04_05_2005                      |
10|                                                             |
11\------------------------------------------------------------*/
12
13#ifndef __SC_NUMREP_H__
14#define __SC_NUMREP_H__
15
16#include <cstdio>
17#include <iostream>
18
19#include "sc_string.h"
20
21namespace sc_dt {
22
23typedef enum {
24    SC_NOBASE = 0,
25    SC_BIN = 2,   // binary
26    SC_OCT = 8,   // octal, two's complement
27    SC_DEC = 10,  // decimal
28    SC_HEX = 16,  // hexadecimal, two's complement
29    SC_BIN_US,    // binary, unsigned
30    SC_BIN_SM,    // binary, sign magnitude
31    SC_OCT_US, 
32    SC_OCT_SM,
33    SC_HEX_US,
34    SC_HEX_SM,
35    SC_CSD        // canonical signed digit
36} sc_numrep;
37
38
39inline const unsigned int bitstring_to_uint(const char * val) { 
40    unsigned int i, res = 0;
41    for (i = 0; val[i] != '\0'; ++i) {
42        res <<= 1;
43        res |= (val[i] == '1') ? 1 : 0;
44    }
45    return res;   
46}
47
48
49template <typename T>
50const sc_string to_string(T val, size_t nbits, sc_numrep n) { 
51    sc_string s(nbits + 3, '0');
52    switch (n) {
53        case SC_HEX :
54        {
55            char t[64];
56            char format[64];
57            sprintf(format, "0x0%%0%dx", (int) nbits / 4);
58            sprintf(t, format, val);
59            s = t;
60            break;
61        }
62        case SC_BIN :
63        {
64            int i;
65            s[1] = 'b';
66            for (i = nbits - 1; i >= 0; --i)
67            {
68                s[i + 3] = (val & 1)?'1':'0';
69                val >>= 1;
70            } 
71            break;
72        }
73        default:
74        {
75                std::cerr << "error\n"; return s;
76        }
77    }
78    return s;
79}
80
81const std::string to_string(sc_numrep);
82
83} // end of sc_dt namespace
84
85using sc_dt::sc_numrep;
86using sc_dt::SC_BIN;
87using sc_dt::SC_HEX;
88using sc_dt::SC_OCT; 
89using sc_dt::SC_DEC;
90using sc_dt::SC_HEX;
91using sc_dt::SC_BIN_US;
92using sc_dt::SC_BIN_SM;
93using sc_dt::SC_OCT_US;
94using sc_dt::SC_OCT_SM;
95using sc_dt::SC_HEX_US;
96using sc_dt::SC_HEX_SM;
97using sc_dt::SC_CSD;
98
99#endif
100
101/*
102# Local Variables:
103# tab-width: 4;
104# c-basic-offset: 4;
105# c-file-offsets:((innamespace . 0)(inline-open . 0));
106# indent-tabs-mode: nil;
107# End:
108#
109# vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
110*/
111
Note: See TracBrowser for help on using the repository browser.