00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef SAMPA_CORE_ADDRESS_H
00020 #define SAMPA_CORE_ADDRESS_H
00021
00022 #include "sampa/core/persistence.h"
00023
00024 namespace Sampa {
00025
00029 typedef unsigned long Address;
00030
00032 Address range_to_address(int);
00033
00034 struct AddressGeneratorInterface {
00035 virtual Address generate(int align) = 0;
00036 };
00038
00050 class SAMPA_PERSISTENT_CLASS(AddressGenerator) {
00051 public:
00052 enum Mode {
00053 INCREMENTAL,
00054 RANDOM
00055 };
00056
00061 AddressGenerator(int burst_size, int word_size);
00062
00066 Address generate(int align = 1) { return m_generator->generate(align); }
00067
00071 Address operator()(int align = 1) { return m_generator->generate(align); }
00072
00074 private:
00075 AddressGeneratorInterface* m_generator;
00076 SAMPA_PERSISTENT(AddressGenerator);
00078 };
00079
00080 }
00081
00082 #endif
00083