Gabriele Contini
2019-12-14 1d593585e35d4410368f9149352431dedae26107
src/library/base/StringUtils.cpp
@@ -2,58 +2,63 @@
 * StringUtils.cpp
 *
 *  Created on: Apr 8, 2014
 *      Author: devel
 *
 */
#include <cctype> //toupper
#include "StringUtils.h"
#include <iostream>
#include <string>
#include <sstream>
#include <cstring>
#include <algorithm>
#include <stdexcept>
#include <regex>
#include "StringUtils.h"
#ifdef WIN32
#ifdef _WIN32
#include <time.h> //mktime under windows
#endif
namespace license {
using namespace std;
string trim_copy(const string& string_to_trim) {
string trim_copy(const string &string_to_trim) {
   std::string::const_iterator it = string_to_trim.begin();
   while (it != string_to_trim.end() && isspace(*it))
      it++;
   while (it != string_to_trim.end() && isspace(*it)) {
      ++it;
   }
   std::string::const_reverse_iterator rit = string_to_trim.rbegin();
   while (rit.base() != it && isspace(*rit))
      rit++;
   while (rit.base() != it && isspace(*rit)) {
      ++rit;
   }
   return std::string(it, rit.base());
}
string toupper_copy(const string& lowercase) {
string toupper_copy(const string &lowercase) {
   string cp(lowercase);
   std::transform(cp.begin(), cp.end(), cp.begin(), (int (*)(int))toupper);
   std::transform(cp.begin(), cp.end(), cp.begin(), (int (*)(int)) toupper);
   return cp;
}
time_t seconds_from_epoch(const char* timeString) {
time_t seconds_from_epoch(const char *timeString) {
   int year, month, day;
   tm tm;
   if (strlen(timeString) == 8) {
      int nfield = sscanf(timeString, "%4d%2d%2d", &year, &month, &day);
      const int nfield = sscanf(timeString, "%4d%2d%2d", &year, &month, &day);
      if (nfield != 3) {
         throw invalid_argument("Date not recognized");
      }
   } else if (strlen(timeString) == 10) {
      int nfield = sscanf(timeString, "%4d-%2d-%2d", &year, &month, &day);
      const int nfield = sscanf(timeString, "%4d-%2d-%2d", &year, &month,
            &day);
      if (nfield != 3) {
         int nfield = sscanf(timeString, "%4d/%2d/%2d", &year, &month, &day);
         const int nfield = sscanf(timeString, "%4d/%2d/%2d", &year, &month,
               &day);
         if (nfield != 3) {
            throw invalid_argument("Date not recognized");
         }
      }
   } else{
   } else {
      throw invalid_argument("Date not recognized");
   }
   tm.tm_isdst = -1;
@@ -67,4 +72,31 @@
   tm.tm_wday = -1;
   return mktime(&tm);
}
const vector<string> split_string(const string &licensePositions,
      char splitchar) {
   std::stringstream streamToSplit(licensePositions);
   std::string segment;
   std::vector<string> seglist;
   while (std::getline(streamToSplit, segment, splitchar)) {
      seglist.push_back(segment);
   }
   return seglist;
}
const static regex iniSection("\\[.*?\\]");
const static regex b64(
      "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$");
FILE_FORMAT identify_format(const string &license) {
   FILE_FORMAT result = UNKNOWN;
   if (regex_match(license, b64)) {
      result = BASE64;
   } else if (regex_search(license, iniSection)) {
      result = INI;
   }
   return result;
}
} /* namespace license */