00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #ifndef __helpfunctions_h__
00040 #define __helpfunctions_h__
00041
00042 #include <vector>
00043 #include <string>
00044 #include <sstream>
00045 #include <ctype.h>
00046
00047
00048 namespace gs {
00049 namespace ctr {
00050
00051 using std::vector;
00052
00053
00055 template<class T>
00056 static void show_vector(std::vector<T> vec) {
00057 std::cout << "vector: size="<< vec.size() << std::endl;
00058 typename std::vector<T>::iterator iter;
00059 for( iter = vec.begin(); iter != vec.end(); iter++ ) {
00060 std::cout << *iter << std::endl;
00061 }
00062 }
00063
00065 template<class T, class P>
00066 static void show_vector_gc_trace(std::vector<T> vec1, std::vector<P> vec2) {
00067 typename std::vector<T>::iterator iter1;
00068 typename std::vector<P>::iterator iter2;
00069 iter2 = vec2.begin();
00070 for( iter1 = vec1.begin() ; iter1 != vec1.end(); iter1++) {
00071 std::cout << *iter1 << " [" << *iter2 << "] ";
00072 iter2++;
00073 }
00074 std::cout << std::endl;
00075 }
00076
00078 template<class T>
00079 static void show_vector(const std::vector<T> vec, const unsigned int size) {
00080 std::cout << " vector: size="<< vec.size()<<", show "<< size<<" items" << std::endl << " ";
00081 assert(vec.size() >= size);
00082 typename std::vector<T>::iterator iter;
00083 for (unsigned int i = 0; i<size; i++) {
00084 std::cout << vec[i] << ", ";
00085 }
00086 std::cout << std::endl;
00087 }
00088
00090 template<class T>
00091 static void show_vector_nosep(const std::vector<T> vec, const unsigned int size) {
00092 std::cout << " vector: size="<< vec.size()<<", show "<< size<<" items" << std::endl << " ";
00093 assert(vec.size() >= size);
00094 show_pure_vector(vec, size);
00095 std::cout << std::endl;
00096 }
00097
00099 template<class T>
00100 static void show_pure_vector(const std::vector<T> vec, const unsigned int size) {
00101 assert(vec.size() >= size);
00102 typename vector<T>::iterator iter;
00103 for (unsigned int i = 0; i<size; i++) {
00104 std::cout << vec[i] ;
00105 }
00106 }
00107
00109 class letter_digit_iterator
00110 {
00111 public:
00112 char count;
00113
00114 letter_digit_iterator()
00115 {
00116 count = 122;
00117 }
00118
00119 char next() {
00120 count++;
00121 if (count == 123) count = 48;
00122 else if (count == 91) count = 97;
00123 else if (count == 58) count = 65;
00124 return count;
00125 }
00126
00127 void reset() {
00128 count = 122;
00129 }
00130
00131 };
00132
00134
00139 template <class T>
00140 static bool search_for_objects(sc_core::sc_object *node, const sc_core::sc_object* but_not_childs_of)
00141 {
00142
00143 {
00144 const std::vector<sc_core::sc_object *> *childs_stack = NULL;
00145 if (node) {
00146
00147 #if SYSTEMC_API == 210
00148
00149 sc_core::sc_module* node_as_module = dynamic_cast< sc_core::sc_module* >(node);
00150 if (node_as_module) {
00151
00152 if (node_as_module)
00153 childs_stack = &(node_as_module->get_child_objects());
00154 }
00155 #else
00156 childs_stack = &node->get_child_objects();
00157 #endif
00158 } else {
00159
00160 #if SYSTEMC_API == 210
00161 sc_core::sc_simcontext *sim;
00162 sim = sc_core::sc_get_curr_simcontext();
00163 childs_stack = &(sim->get_child_objects());
00164 #else
00165 childs_stack = &sc_core::sc_get_top_level_objects();
00166 #endif
00167 }
00168
00169 T *type = dynamic_cast<T*>(node);
00170 if (type) {
00171 return true;
00172 }
00173
00174
00175 if (childs_stack) {
00176 for (unsigned int i = 0; i < childs_stack->size(); i++) {
00177 sc_core::sc_object *chnode = childs_stack->at(i);
00178 if (chnode != but_not_childs_of) {
00179 if (search_for_objects<T>(chnode, but_not_childs_of))
00180 return true;
00181 }
00182 }
00183 }
00184 }
00185 return false;
00186 }
00187
00189
00200 inline std::string convert_to_sc_name(std::string name) {
00201 std::stringstream ssret;
00202 std::string::iterator my_iter;
00203 const std::string match = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
00204 for(my_iter = name.begin(); my_iter != name.end(); my_iter++)
00205 {
00206 size_t found = match.find_first_of(*my_iter);
00207
00208 if (found != std::string::npos)
00209 ssret << *my_iter;
00210 else
00211 ssret << "_";
00212 }
00213 return ssret.str();
00214 }
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00227
00228
00229
00230
00231
00233
00234
00235
00236
00237
00239
00240
00241
00242
00243
00244
00245
00246 }
00247 }
00248
00249 #endif