source: trunk/address.h @ 2

Last change on this file since 2 was 2, checked in by guillaumeb, 15 years ago

commit initial

File size: 1.9 KB
Line 
1#ifndef ADDRESS_H_
2#define ADDRESS_H_
3
4#include <systemc.h>
5#include <iomanip>
6#include <iostream>
7#include "raw_address.h"
8
9class Address {
10    public:
11        unsigned int block_size;
12        unsigned int block;
13        unsigned int displacement;
14
15        // default constructor
16        Address (const unsigned int block = 0, const unsigned long displacement = 0, const unsigned int block_size = 0) {
17            this->block = block;
18            this->displacement = displacement;
19            this->block_size = block_size;
20        }
21
22        Address (const RawAddress req, const int block_size)
23        {
24            this->block = req.address / block_size;
25            this->displacement = req.address % block_size;
26            this->block_size = block_size;
27        }
28
29        inline bool operator == (const Address & rhs) const {
30            return (rhs.block * rhs.block_size + rhs.displacement == block * block_size + displacement );
31        }
32
33        inline Address& operator = (const Address& rhs) {
34            block = rhs.block;
35            block_size = rhs.block_size;
36            displacement = rhs.displacement;
37            return *this;
38        }
39
40        inline friend void sc_trace(sc_trace_file *tf, const Address & v, const std::string & NAME ) {
41            // FIXME
42            //  sc_trace(tf,v.block, NAME + ".info");
43            //  sc_trace(tf,v.displacement, NAME + ".flag");
44        }
45
46        inline friend ostream& operator << ( ostream& os,  Address const & v ) {
47            os << "0x" << hex << std::setfill('0') << std::setw(8) <<  (v.block * v.block_size + v.displacement) ;
48            return os;
49        }
50
51        inline bool operator < (const Address & rhs) const {
52            return (rhs.block * rhs.block_size + rhs.displacement < block * block_size + displacement); 
53        }
54
55        inline const unsigned int as_absolute() {
56            return (block * block_size + displacement);
57        }
58
59};
60#endif
61
62
Note: See TracBrowser for help on using the repository browser.