clock::clock(int start_pos, int s_rel, int ende_pos, int e_rel, int order) { reset(start_pos, s_rel, ende_pos, e_rel, order); } void clock::reset(int start_pos, int s_rel, int ende_pos, int e_rel, int order) { start= start_pos; start_rel= s_rel; ende= ende_pos; ende_rel= e_rel; ord= order; cnt.resize(ord); first_time= 1; if (ord > 0) { cnt.set(0, start); for (int i= 1; i < ord; i++) { cnt.set(i, start_rel*cnt[i-1]); } } } int clock::advance() { if (first_time) { first_time= 0; return 1; } int level= ord-1; while (level > -1) { cnt.set(level, cnt[level]+1); if (((level > 0) && (cnt[level] <= ende_rel*cnt[level-1] + ende)) || ((level == 0) && (cnt[level] <= ende))) { if (level == ord-1) { return 1; } else { level++; cnt.set(level, start_rel*cnt[level-1]-1); } } else { level--; } } return 0; } int clock::operator[](int i) { return cnt[i]; } tnvector<int> clock::all() { return cnt; } tnvector<int> clock::all_up_ordered() { tnvector<int> vec(cnt); int buf; for (int i= 0; i < ord; i++) { for (int j= i+1; j < ord; j++) { if (vec[i] > vec[j]) { buf= vec[i]; vec.set(i, vec[j]); vec.set(j, buf); } } } return vec; } tnvector<int> clock::all_down_ordered() { tnvector<int> vec(cnt); int buf; for (int i= 0; i < ord; i++) { for (int j= i+1; j < ord; j++) { if (vec[i] < vec[j]) { buf= vec[i]; vec.set(i, vec[j]); vec.set(j, buf); } } } return vec; }