Beispiel #1
0
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;
}
Beispiel #3
0
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;
}