Skip to content

Instantly share code, notes, and snippets.

@shivallan
Created April 30, 2015 13:17
Show Gist options
  • Save shivallan/2a56fe1f0395456b97f2 to your computer and use it in GitHub Desktop.
Save shivallan/2a56fe1f0395456b97f2 to your computer and use it in GitHub Desktop.
#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <sys/time.h>
void event(std::vector<char> &v, std::vector<unsigned long long> &sp, std::vector<unsigned long long> &ep)
{
char pre_val(0), cur_val(0);
unsigned long long pos(0);
for (std::vector<char>::iterator i = v.begin(); i != v.end(); ++i)
{
cur_val = *i;
if ((cur_val != pre_val) && (cur_val))
{
pos = std::distance(v.begin(), i);
sp.push_back(pos);
if (pre_val) ep.push_back(pos);
pre_val = cur_val;
}
}
ep.push_back(std::distance(v.begin(), v.end() - 1));
}
void period(std::vector<char> &v, std::vector<unsigned long long> &sp, std::vector<unsigned long long> &ep)
{
char pre_val(0), cur_val(0);
unsigned long long pos(0);
for (std::vector<char>::iterator i = v.begin(); i != v.end(); ++i)
{
cur_val = *i;
if (cur_val != pre_val)
{
pos = std::distance(v.begin(), i);
if (cur_val) sp.push_back(pos);
if (pre_val) ep.push_back(pos);
pre_val = cur_val;
}
}
if (cur_val) ep.push_back(std::distance(v.begin(), v.end() - 1));
}
int main()
{
std::vector<char> v;
std::vector<unsigned long long> sp, ep;
timeval t1, t2;
double elapsedTime;
// Creation of events vector like [0 0 0 1 0 0 -1 0 0 -1 -1 1 0 0 0 1 0 0 1 -1 0 0 1]
v.push_back(0); v.push_back(0);
v.push_back(0); v.push_back(1);
v.push_back(0); v.push_back(0);
v.push_back(-1); v.push_back(0);
v.push_back(0);
v.push_back(-1); v.push_back(-1);
v.push_back(1); v.push_back(0);
v.push_back(0); v.push_back(0);
v.push_back(1); v.push_back(0);
v.push_back(0); v.push_back(1);
v.push_back(-1); v.push_back(0);
v.push_back(0); v.push_back(1);
std::cout << "Input vector:\n";
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
// start timer
gettimeofday(&t1, NULL);
event(v, sp, ep);
// stop timer
gettimeofday(&t2, NULL);
// compute and print the elapsed time in millisec
elapsedTime = (t2.tv_sec - t1.tv_sec) * 1000.0; // sec to ms
elapsedTime += (t2.tv_usec - t1.tv_usec) / 1000.0; // us to ms
std::cout << "Event => sp: ";
std::copy(sp.begin(), sp.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
std::cout << "Event => ep: ";
std::copy(ep.begin(), ep.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
std::cout << "Event => elapsed time " << elapsedTime << " ms \n";
std::vector<unsigned long long>().swap(sp);
std::vector<unsigned long long>().swap(ep);
// start timer
gettimeofday(&t1, NULL);
period(v, sp, ep);
// stop timer
gettimeofday(&t2, NULL);
// compute and print the elapsed time in millisec
elapsedTime = (t2.tv_sec - t1.tv_sec) * 1000.0; // sec to ms
elapsedTime += (t2.tv_usec - t1.tv_usec) / 1000.0; // us to ms
std::cout << "Period => sp: ";
std::copy(sp.begin(), sp.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
std::cout << "Period => ep: ";
std::copy(ep.begin(), ep.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
std::cout << "Period => elapsed time " << elapsedTime << " ms \n";
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment