bool has_one_repetition(const trace &t) { if (t.size() <= 1) return true; if (t.back()== t[t.size()-2]) return false; if (t.tar_size()== t.size()){ if (t[0] == t.back()) return false; } return true; }
// ----------------------------------------------------------------------------- // static bool trace_reader::copy_trace(const trace &pt_in, trace &pt_out, const trace::event_set &events) { trace::real last_power = 0.0f; trace::event_set::const_iterator curr_event = events.begin(); foreach (const trace::sample sample, pt_in.samples()) { // primetime may break the power sample into multiple events if (pt_out.size() && pt_out.back().time == sample.time) return false; // sample and hold by copying the previous power into each empty sample while ((curr_event != events.end()) && (*curr_event < sample.time)) pt_out.push_back(trace::sample(*curr_event++, sample.power)); assert(sample.time == *curr_event); pt_out.push_back(trace::sample(*curr_event++, sample.power)); // if this is disabled, last_power will always be 0 (ie. empty samples) last_power = sample.power; } // pad out (with sample and hold) any trailing samples, if necessary while (curr_event != events.end()) pt_out.push_back(trace::sample(*curr_event++, last_power)); return true; }
bool has_two_repetition(const trace &t) { if (t.size() <= 2) return true; edge e1 = t.back(); edge e2 = t[t.size()-2]; for (size_t i = 0; i < t.size()-2; i++) { if (t[i] == e1 && t[i+1] == e2) return false; if (t[i] == e2 && t[i+1] == e1) return false; } return true; }