142template<
class Object>
143void PrettyPrint(
const Object& A, std::string name,
const char* color = tc::white)
145 std::cout << color << name << tc::none << std::endl << A << std::endl;
165 ret = mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO);
167 if (errno != EEXIST) {
168 std::cerr << tc::redL <<
"Could not create directory " << path <<
" (error: " << strerror(errno) <<
")\n";
174 chmod(path, S_IRWXU | S_IRWXG | S_IRWXO);
190 freq(frequency), spinIndex(0), spin_chars(
"/-\\|")
192 clock_gettime(CLOCK_MONOTONIC, &last);
193 period = 1 /
static_cast<double>(freq + 1E-6);
200 clock_gettime(CLOCK_MONOTONIC, &now);
201 double timeElapsed = (now.tv_sec - last.tv_sec) + (now.tv_nsec - last.tv_nsec) / 1E9;
204 if (period - timeElapsed < 1E-3) {
208 putchar(spin_chars[spinIndex % spin_chars.length()]);
219 struct timespec last, now;
222 unsigned long spinIndex;
223 std::string spin_chars;
235 spinIndex(0), spin_chars(
"... .. .. .. .... .... .")
237 clock_gettime(CLOCK_MONOTONIC, &last);
238 period = 1 /
static_cast<double>(freq);
245 clock_gettime(CLOCK_MONOTONIC, &now);
246 double timeElapsed = (now.tv_sec - last.tv_sec) + (now.tv_nsec - last.tv_nsec) / 1E9;
249 if (period - timeElapsed < 1E-3) {
252 putchar(spin_chars[spinIndex % spin_chars.length()]);
253 putchar(spin_chars[(spinIndex % spin_chars.length()) + 1]);
254 putchar(spin_chars[(spinIndex % spin_chars.length()) + 2]);
255 putchar(spin_chars[(spinIndex % spin_chars.length()) + 3]);
266 struct timespec last, now;
269 unsigned long spinIndex;
270 std::string spin_chars;
280 running(false), elapsedTime(0), lapTime(0)
282 clock_gettime(CLOCK_MONOTONIC, &now);
288 clock_gettime(CLOCK_MONOTONIC, &start);
305 clock_gettime(CLOCK_MONOTONIC, &now);
306 elapsedTime = (now.tv_sec - start.tv_sec) + (now.tv_nsec - start.tv_nsec) / 1E9;
318 clock_gettime(CLOCK_MONOTONIC, &now);
319 lapTime = (now.tv_sec - lap.tv_sec) + (now.tv_nsec - lap.tv_nsec) / 1E9;
320 laps.push_back(lapTime);
327 clock_gettime(CLOCK_MONOTONIC, &now);
328 lapTime = (now.tv_sec - lap.tv_sec) + (now.tv_nsec - lap.tv_nsec) / 1E9;
336 struct timespec start, lap, now;
337 double elapsedTime, lapTime;
343 numIterations(iterations), currentIteration(0), currentPerc(0.0)
350 currentPerc = ((double) currentIteration * 100.0 / (
double) numIterations);
351 std::cout <<
"\r" << std::setprecision(3) <<
"Progress: " << currentPerc <<
"% ";
356 int currentIteration;
363 std::string s = std::to_string(val);
364 std::replace(s.begin(), s.end(),
',',
'.');
386 for (
int i = 0; i < size; ++i) {
388 if (i < (size - 1)) {
389 std::cout << delimiter <<
" ";
397 for (
int i = 1; i <= size; ++i) {
400 std::cout << delimiter <<
" ";
408 std::string arrayText;
409 for (
int i = 0; i < size; ++i) {
411 if (i < (size - 1)) {
412 arrayText = arrayText + delimiter +
" ";
421 std::string arrayText;
422 for (
int i = 1; i <= size; ++i) {
425 arrayText = arrayText + delimiter +
" ";
432void PrintSTLVector(T vecObj,
const char delimiter,
const std::string preText =
"")
434 std::cout << preText <<
" ";
435 for (
typename T::iterator itr = vecObj.begin(); itr != vecObj.end(); ++itr) {
437 if (itr != (vecObj.end() - 1)) {
438 std::cout << delimiter <<
" ";
446 std::string vectorText;
447 vectorText = preText +
" ";
448 for (
typename T::iterator itr = vecObj.begin(); itr != vecObj.end(); ++itr) {
450 if (itr != (vecObj.end() - 1)) {
451 vectorText = vectorText + delimiter +
" ";
460 for (
typename T::iterator itr = vecObj.begin(); itr != vecObj.end(); ++itr) {
461 std::cout <<
"#" << itr - vecObj.begin() <<
": ";
474 std::time_t t = std::time(NULL);
476 std::strftime(mbstr,
sizeof(mbstr),
"%Y-%m-%d_%H.%M.%S", std::localtime(&t));
477 std::string currentDate(mbstr);
482template<
typename K,
typename V>
485template<
typename K,
typename V>
488 bool keyWasFound =
false;
490 for (it = myMap.begin(); it != myMap.end(); ++it) {
491 if (it->second == value) {
506 return (Left + Right * Right);
510#if defined(__linux__) || defined(linux)
516inline std::string get_selfpath()
519 ssize_t len = ::readlink(
"/proc/self/exe", buff,
sizeof(buff) - 1);
522 std::string path(buff);
523 std::string::size_type t = path.find_last_of(
"/");
524 path = path.substr(0, t);
527 printf(
"Cannot determine executable path! [Exiting]\n");
535inline std::string get_homepath()
539 if ((homedir = getenv(
"HOME")) == NULL) {
540 homedir = getpwuid(getuid())->pw_dir;
546inline bool does_file_exists(
const std::string& name)
549 return (stat(name.c_str(), &buffer) == 0);
552inline std::string exec(
const char* cmd)
554 std::array<char, 128> buffer;
556 std::shared_ptr<FILE> pipe(popen(cmd,
"r"), pclose);
558 throw std::runtime_error(
"popen() failed!");
559 while (!feof(pipe.get())) {
560 if (fgets(buffer.data(), 128, pipe.get()) != NULL)
561 result += buffer.data();
566inline void ParseIPString(
const std::string input_Str,
unsigned char ip[4])
568 std::string ipString = input_Str, ip_chunk;
569 std::string::size_type t1;
570 for (
int i = 0; i < 3; ++i) {
571 t1 = ipString.find_first_of(
".");
572 ip_chunk = ipString.substr(0, t1);
573 ip[i] =
static_cast<unsigned char>(stod(ip_chunk, &t1));
574 ipString = ipString.substr(t1 + 1, ipString.size());
576 ip[3] =
static_cast<unsigned char>(stod(ipString, &t1));
579inline void paddr(
unsigned char *a)
581 printf(
"%d.%d.%d.%d\n", a[0], a[1], a[2], a[3]);
590 slen =
sizeof(si_server);
593 UDPSenderSocket(
char ip[],
char port[]) :
600 void Configure(
char ip[],
char port[])
602 if ((sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) {
603 perror(
"UPDSenderSocket - socket creation failed");
607 uint16_t serverPort =
static_cast<uint16_t
>(stod(std::string(port)));
608 ConfigureSenderSocket(si_server, ip, serverPort);
611 template<
typename TP>
612 int Send(TP dataToSend, std::size_t dataSize)
614 return sendto(sockfd, dataToSend, dataSize, 0, (
struct sockaddr *) &si_server, slen);
619 bool ConfigureSenderSocket(
struct sockaddr_in &si_out,
char *ip, uint16_t port)
623 memset((
char *) &si_out, 0,
sizeof(si_out));
624 si_out.sin_family = AF_INET;
625 si_out.sin_port = htons(port);
627 if (inet_aton(ip, &si_out.sin_addr) == 0) {
628 fprintf(stderr,
"inet_aton() failed\n");
635 struct sockaddr_in si_server;
640class UPDReceiverSocket
643 UPDReceiverSocket() :
646 slen_ =
sizeof(si_client_);
649 UPDReceiverSocket(
char port[],
bool nonBlocking) :
652 Configure(port, nonBlocking);
655 void Configure(
char port[],
bool nonBlocking)
657 uint16_t port_ =
static_cast<uint16_t
>(stod(std::string(port)));
658 ConfigureReceiverSocket(sockfd_, si_client_, port_, nonBlocking);
661 template<
typename TP>
662 int Receive(TP data, std::size_t dataSize)
664 return recvfrom(sockfd_, data, dataSize, 0, (
struct sockaddr *) &si_client_, &slen_);
669 bool ConfigureReceiverSocket(
int &sockfd,
struct sockaddr_in &si_in, uint16_t port,
bool nonBlocking)
674 if ((sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) {
680 memset((
char *) &si_in, 0,
sizeof(si_in));
681 si_in.sin_family = AF_INET;
682 si_in.sin_port = htons(port);
683 si_in.sin_addr.s_addr = htonl(INADDR_ANY);
686 if (bind(sockfd, (
struct sockaddr*) &si_in,
sizeof(si_in)) == -1) {
687 perror(
"bind error");
693 if (fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFL) | O_NONBLOCK) < 0) {
694 perror(
"Error in putting the socket in non blocking mode");
702 struct sockaddr_in si_client_;
709 inline bool CopyFile(
const std::string& inputFile,
const std::string& outputFile)
713 if (does_file_exists(inputFile)) {
714 std::ifstream src(inputFile, std::ios::binary);
716 dst.open(outputFile, std::ios::binary);
717 chmod(outputFile.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
722 std::cout <<
"Error in FUTILS::CopyFile(), file='" << inputFile <<
"' does not exist!" << std::endl;
759 void Init(
const int dataSize,
const double alpha)
769 std::vector<double>&
Filter(
const std::vector<double> array)
786 std::cout <<
"Error: FirstOrderFilter::Init(dataSize, alpha) was not called!\n" <<
"Exiting..."