Conscience Core
conscience_util.h
Go to the documentation of this file.
1 #ifndef CONSCIENCE_UTIL_h
2 #define CONSCIENCE_UTIL_h
3 
4 #include <chrono>
5 #include <iostream>
6 #include <iterator>
7 #include <map>
8 #include <any>
9 #include <array>
10 #include <memory>
11 #include <sstream>
12 #include <vector>
13 
14 #include <algorithm>
15 #include <cassert>
16 #include <exception>
17 #include <functional>
18 #include <iomanip>
19 #include <iostream>
20 #include <optional>
21 #include <string>
22 #include <utility>
23 #include <variant>
24 
25 #include <random>
26 
27 // can't define those functions with inline because cause crash when nest the call of this function - so we define it with precompil macros
28 #define deleteIfNotNull(objPointer) \
29  if (objPointer) { \
30  delete objPointer; \
31  objPointer = nullptr; \
32  }
33 #define deleteItems(vectorOfItems) [](const auto &theVector) { for (const auto * item : theVector) { delete item; } }(vectorOfItems)
34 #define deleteValues(mapOfKeysAndValues) [](const auto &theMap) { for (auto it = theMap.begin(); it != theMap.end(); it++) { delete it->second; } }(mapOfKeysAndValues)
35 #if DEBUG == 1
36 #define vectorSafeAt(vector, index, vectorDescription) [&](const auto *theVectorPtr, int theIndex) { return (theIndex >= theVectorPtr->size() ? throw std::runtime_error("WARNING: try to reach index " + to_string(theIndex) + " from vector " + vectorDescription + " of size " + to_string(theVectorPtr->size())) : theVectorPtr->at(theIndex)); }(vector, index)
37 #define mapSafeAt(map, key, mapDescription) [&](const auto *theMapPtr, const auto &theKey) { return (theMapPtr->find(theKey) == theMapPtr->end() ? throw std::runtime_error("WARNING: try to reach key " + toStringOrNullString(theKey) + " from map " + mapDescription + " of size " + to_string(theMapPtr->size())) : theMapPtr->at(theKey)); }(map, key)
38 #else
39 #define vectorSafeAt(vector, index, vectorDescription) (vector)->at(index)
40 #define mapSafeAt(map, key, mapDescription) (map)->at(key)
41 #endif
42 
43 #define ASSERT(MSG, EXPR) \
44  assert(((void)string((MSG)).c_str(), (EXPR)))
45 
46 #define COMMA ,
47 #define MACRO_PARENS ()
48 
49 // we need this helper to evaluate macro inside macro, e.g. for fields list, replace comma inside
50 #define VARGS_STR_HELPER(...) #__VA_ARGS__
51 #define VARGS_STR(...) VARGS_STR_HELPER(__VA_ARGS__)
52 
53 // Rescan macro tokens 256 times
54 #define MACRO_EXPAND(arg) MACRO_EXPAND1(MACRO_EXPAND1(MACRO_EXPAND1(MACRO_EXPAND1(arg))))
55 #define MACRO_EXPAND1(arg) MACRO_EXPAND2(MACRO_EXPAND2(MACRO_EXPAND2(MACRO_EXPAND2(arg))))
56 #define MACRO_EXPAND2(arg) MACRO_EXPAND3(MACRO_EXPAND3(MACRO_EXPAND3(MACRO_EXPAND3(arg))))
57 #define MACRO_EXPAND3(arg) MACRO_EXPAND4(MACRO_EXPAND4(MACRO_EXPAND4(MACRO_EXPAND4(arg))))
58 #define MACRO_EXPAND4(arg) arg
59 
60 #define FOR_EACH(macro, ...) \
61  __VA_OPT__(MACRO_EXPAND(FOR_EACH_HELPER(macro, __VA_ARGS__)))
62 #define FOR_EACH_HELPER(macro, a1, ...) \
63  macro(a1) \
64  __VA_OPT__(FOR_EACH_AGAIN MACRO_PARENS(macro, __VA_ARGS__))
65 #define FOR_EACH_AGAIN() FOR_EACH_HELPER
66 
67 #define ENUM_TO_STRING_FILL_MAP(name) \
68  { \
69  /* if cppdoc added, we strip it */ \
70  std::string enumIdentifier = #name; \
71  size_t pos = enumIdentifier.find("*/"); \
72  if (pos != std::string::npos) { \
73  enumIdentifier = trim(enumIdentifier.substr(pos + 1)); \
74  } \
75  theMap[name] = enumIdentifier; \
76  }
77 
78 #define ENUM(ENUM_typeName, ...) \
79  enum ENUM_typeName : unsigned long long { \
80  __VA_ARGS__ \
81  }; \
82  inline const std::map<ENUM_typeName, std::string> &getEnumNames##ENUM_typeName() { \
83  static std::map<ENUM_typeName, std::string> theMap; \
84  if (theMap.size() == 0) { \
85  FOR_EACH(ENUM_TO_STRING_FILL_MAP, __VA_ARGS__) \
86  } \
87  return theMap; \
88  } \
89  inline string toString##ENUM_typeName(ENUM_typeName enumElement) { \
90  auto &names = getEnumNames##ENUM_typeName(); \
91  auto matchIt = names.find(enumElement); \
92  return matchIt == names.end() ? "unknown " + to_string(enumElement) : matchIt->second; \
93  } \
94  inline vector<ENUM_typeName> getValues##ENUM_typeName() { \
95  return {__VA_ARGS__}; \
96  } \
97  inline bool is##ENUM_typeName##Valid(ENUM_typeName item) { \
98  vector<ENUM_typeName> values = getValues##ENUM_typeName(); \
99  for (auto itemFromValues : values) { \
100  if (itemFromValues == item) { \
101  return true; \
102  } \
103  } \
104  return false; \
105  } \
106  inline ENUM_typeName intTo##ENUM_typeName(int value) { \
107  ENUM_typeName item = (ENUM_typeName)value; \
108  if (!is##ENUM_typeName##Valid(item)) { \
109  throw runtime_error("invalid " + string(#ENUM_typeName) + " value: " + to_string(value)); \
110  } \
111  return item; \
112  } \
113  inline ENUM_typeName parse##ENUM_typeName(const string &enumElementString) { \
114  optional<ENUM_typeName> match = keyOfValueInMap(&getEnumNames##ENUM_typeName(), enumElementString); \
115  if (match) { \
116  return match.value(); \
117  } \
118  throw conscience_utils::CannotParseEnumException("unknown element: " + enumElementString); \
119  }
120 
121 using std::string, std::any, std::function, std::to_string, std::pair, std::make_pair, std::optional, std::vector, std::ostringstream, std::ostream_iterator, std::map, std::endl, std::cerr, std::variant, std::string, std::chrono::milliseconds, std::chrono::system_clock, std::chrono::high_resolution_clock, std::runtime_error, std::type_info;
122 
123 namespace conscience_utils {
124 
128 template <class TTestedType, class TPointee>
129 concept IsPointerOf = std::is_same_v<TTestedType, const TPointee *> || std::is_same_v<TTestedType, TPointee *> || std::is_same_v<TTestedType, std::shared_ptr<const TPointee>> || std::is_same_v<TTestedType, std::shared_ptr<TPointee>>;
130 
134 template <class, template <class...> class>
135 inline constexpr bool IsTemplatedType = false;
136 
140 template <template <class...> class T, class... Args>
141 inline constexpr bool IsTemplatedType<T<Args...>, T> = true;
142 
143 template <typename T>
144 concept IsOptional = IsTemplatedType<T, std::optional>;
145 
146 template <typename T>
147 concept IsVector = IsTemplatedType<T, std::vector>;
148 
149 template <class A>
150 struct IsStdFixedArrayStruct : std::false_type {};
151 
152 // only works with arrays by specialization.
153 template <class T, std::size_t I>
154 struct IsStdFixedArrayStruct<std::array<T, I>> : std::true_type {};
155 
156 template <class T>
158 
159 template <typename T>
160 concept IsMap = IsTemplatedType<T, std::map>;
161 
162 template <typename T>
163 concept IsEnum = std::is_enum_v<T>;
164 
165 // Le trait générique (cas "non-pointeur") :
166 template <typename T>
167 struct PointeeType {
168  // Par défaut, "pas un pointeur" => pointee_type = void
170  static constexpr bool isPointer = false;
171 };
172 
173 // Partiale specialization pour "U*"
174 template <typename U>
175 struct PointeeType<U *> {
176  using pointee_type = U;
177  static constexpr bool isPointer = true;
178 };
179 
180 // Partiale specialization pour "const U*"
181 template <typename U>
182 struct PointeeType<const U *> {
183  using pointee_type = const U;
184  static constexpr bool isPointer = true;
185 };
186 
187 // Partiale specialization pour "U* const"
188 template <typename U>
189 struct PointeeType<U *const> {
190  using pointee_type = U;
191  static constexpr bool isPointer = true;
192 };
193 
194 // Partiale specialization pour "const U* const"
195 template <typename U>
196 struct PointeeType<const U *const> {
197  using pointee_type = const U;
198  static constexpr bool isPointer = true;
199 };
200 
201 template <typename T>
203 
204 template <typename T>
206  static constexpr bool isSharedPtr = false;
208 };
209 
210 // Spécialisation partielle : T = std::shared_ptr<U>
211 template <typename U>
212 struct SharedPtrTraits<std::shared_ptr<U>> {
213  static constexpr bool isSharedPtr = true;
214  using pointee_type = U; // type contenu dans le shared_ptr
215 };
216 
217 template <typename T>
219 
220 class CannotParseEnumException : public runtime_error {
221 public:
222  CannotParseEnumException(const string &s) : runtime_error(s.c_str()) {}
223 };
224 
225 static inline const string ALL_SPACES_STRING = " \n\t\r";
226 string trim(const string &str, const string &trimmedChars = " ");
227 
228 string floatArrayToString(float *floatArray, int size);
229 
230 string doubleArrayToString(double *floatArray, int size);
231 
232 string intArrayToString(int *intArray, int size);
233 
234 string boolToString(bool value);
235 
240 
244 string toStringDateAndTime();
245 
246 vector<string> *splitString(const string &inputString, const string &delimiter, bool escapeDelimiterWithBackslash = false);
247 
248 vector<float> *parseFloatList(string input, char separator = ',');
249 
250 vector<int> *parseIntList(string input, char separator = ',');
251 
252 map<string, string> parseMap(string input, const string &entriesSeparator = "&", const string &keyValueSeparator = "=", bool removeGlobalBracketIfExist = false);
253 
254 optional<int> parseInt(const string &inputString);
255 optional<double> parseDouble(const string &inputString);
256 
261 bool replaceInString(string &str, const string &from, const string &to, bool onlyFirst = true);
262 
266 bool replaceAllInString(string &str, const string &from, const string &to);
267 
271 void removeSpacesInString(string &str);
272 
273 string toLowerCase(string &str);
274 string toUpperCase(string &str);
275 bool startsWithIgnoreCase(const string &str, const string &searchedPrefix);
276 void stringRemoveToken(string &s, const std::string_view &token);
277 
281 string snakeCaseToPascalCase(const string &snakeCaseString);
282 
283 template <class T>
284 string toStringOrNullString(T *object) {
285  if (object == nullptr) {
286  return "NULL";
287  }
288 
289  ostringstream ss;
290  ss << object;
291  return ss.str();
292 }
293 
294 template <class T>
295 string toStringOrNullString(T object) {
296  ostringstream ss;
297  ss << object;
298  return ss.str();
299 }
300 
301 template <class T>
302 string vectorToString(const vector<T> &vector, const char *separator = ",") {
303  ostringstream oss;
304 
305  if (!vector.empty()) {
306  // Convert all but the last element to avoid a trailing ","
307  copy(vector.begin(), vector.end() - 1,
308  ostream_iterator<T>(oss, separator));
309 
310  // Now add the last element with no delimiter
311  oss << vector.back();
312  }
313 
314  return oss.str();
315 }
316 
317 template <class T>
318 vector<const T *> *vectorOfPointerToConst(vector<T *> *theVector) {
319  return (vector<const T *> *)(vector<void *> *)theVector;
320 }
321 
322 template <class T>
323 vector<const T *> &vectorOfPointerToConst(vector<T *> &&theVector) {
324  return (vector<const T *> &)(vector<void *> &)theVector;
325 }
326 
327 template <class T>
328 vector<const T *> &vectorOfPointerToConst(vector<T *> &theVector) {
329  return (vector<const T *> &)(vector<void *> &)theVector;
330 }
331 
332 template <class T>
333 const vector<const T *> &vectorOfPointerToConst(const vector<T *> &theVector) {
334  return (const vector<const T *> &)(const vector<void *> &)theVector;
335 }
336 
337 template <class T>
338 vector<T> vectorsConcat(const vector<T> &vector1, const vector<T> &vector2) {
339  vector<T> copy = vector1;
340  copy.insert(copy.end(), vector2.begin(), vector2.end());
341  return copy;
342 }
343 
344 template <class T>
345 vector<T *> *vectorCloneDeep(const vector<T *> *source) {
346  if (source == nullptr) {
347  return nullptr;
348  }
349  auto clone = new vector<T *>();
350  for (T *item : *source) {
351  clone->push_back(item->clone());
352  }
353  return clone;
354 }
355 
356 template <class T>
357 inline void vectorPushIfMissing(vector<T> &vector, T value) {
358  if (find(vector.begin(), vector.end(), value) == vector.end()) {
359  vector.push_back(value);
360  }
361 }
362 
366 template <class T, class R>
367 inline vector<R> vectorTransform(const vector<T> &source, function<R(const T &item)> transformFunction) {
368  vector<R> output;
369  std::transform(source.begin(), source.end(), std::back_inserter(output), transformFunction);
370  return output;
371 }
372 
373 template <class T>
374 inline typename std::vector<T>::iterator vectorIndexOf(const vector<T> &vector, T value) {
375  return std::find(vector.begin(), vector.end(), value);
376 }
377 
378 template <class T>
379 inline bool vectorContains(const vector<T> &vector, T value) {
380  if (vector.empty()) {
381  return false;
382  }
383  return std::find(vector.begin(), vector.end(), value) != vector.end();
384 }
385 
392 template <class T>
393 inline vector<T> &vectorRemoveIf(vector<T> &theVector, function<bool(const T &)> predicate) {
394  auto it = theVector.begin();
395  while (it != theVector.end()) {
396  if (predicate(*it)) {
397  it = theVector.erase(it);
398  } else {
399  ++it;
400  }
401  }
402  return theVector;
403 }
404 
409 template <class T>
410 inline vector<T> &vectorRemove(vector<T> &theVector, const T &item) {
411  theVector.erase(std::remove(theVector.begin(), theVector.end(), item), theVector.end());
412  return theVector;
413 }
414 
418 template <class K, class V>
419 const optional<K> keyOfValueInMap(const map<K, V> *map, V searchedValue) {
420  for (const auto &[key, value] : *map) {
421  if (value == searchedValue) {
422  return key;
423  }
424  }
425  return {};
426 }
427 
428 template <class TKey, class TValue>
429 bool areMapsEqual(const map<TKey, TValue> &map1, const map<TKey, TValue> &map2) {
430  return map1.size() == map2.size() && std::equal(map1.begin(), map1.end(), map2.begin());
431 }
432 
436 template <class TKey, class TValue>
437 vector<TKey> mapKeys(const map<TKey, TValue> &theMap) {
438  vector<TKey> keys;
439 
440  if (!theMap.empty()) {
441  for (auto it = theMap.begin(); it != theMap.end(); it++) {
442  keys.push_back(it->first);
443  }
444  }
445 
446  return keys;
447 }
448 
452 template <class TKey, class TValue>
453 vector<TValue> mapValuesConst(const map<TKey, const TValue> &theMap) {
454  vector<TValue> values;
455  for (auto it = theMap.begin(); it != theMap.end(); it++) {
456  values.push_back((TValue)it->second);
457  }
458 
459  return values;
460 }
461 
465 template <class TKey, class TValue>
466 vector<TValue> mapValues(const map<TKey, TValue> &theMap) {
467  vector<TValue> values;
468  for (auto it = theMap.begin(); it != theMap.end(); it++) {
469  values.push_back(it->second);
470  }
471 
472  return values;
473 }
474 
478 template <class TKey, class TValue>
479 vector<TValue *> mapValues(const map<TKey, TValue *> &theMap) {
480  vector<TValue *> values;
481  for (auto it = theMap.begin(); it != theMap.end(); it++) {
482  values.push_back(it->second);
483  }
484  return values;
485 }
486 
490 template <class TKey, class TValue>
491 inline void mapEraseIfExist(std::map<TKey, TValue> &theMap, const TKey &key) {
492  auto it = theMap.find(key);
493  if (it != theMap.end()) {
494  theMap.erase(it);
495  }
496 }
497 
501 template <class K, class V>
502 string mapToString(const map<K, V> &theMap, const string &entriesSeparator = ",", const string &keyValueSeparator = "=") {
503  ostringstream oss;
504 
505  if (!theMap.empty()) {
506  for (auto it = theMap.begin(); it != theMap.end(); it++) {
507  oss << it->first << keyValueSeparator << it->second << entriesSeparator;
508  }
509  }
510 
511  return oss.str();
512 }
513 
514 system_clock::time_point timepointWithTime(optional<int> hours = {}, optional<int> minutes = {}, optional<int> seconds = {}, system_clock::time_point timePoint = system_clock::now());
515 
516 unsigned long long timestampWithTime(optional<int> hours = {}, optional<int> minutes = {}, optional<int> seconds = {}, system_clock::time_point timePoint = system_clock::now());
517 
518 unsigned long long toMillis(system_clock::time_point timePoint);
519 
520 unsigned long long diffMillis(system_clock::time_point timePoint1, system_clock::time_point timePoint2);
521 
522 unsigned long long nowMillis();
523 
524 system_clock::time_point toTimePoint(unsigned long long timestampMillis);
525 
526 template <typename K, typename V>
527 bool equals(const map<K, V> &map1, const map<K, V> &map2) {
528  if (map1.size() != map2.size()) {
529  return false;
530  }
531  for (auto it = map1.begin(); it != map1.end(); it++) {
532  if (map2.find(it->first) == map2.end()) {
533  return false;
534  }
535  if (map2.at(it->first) != map1.at(it->first)) {
536  return false;
537  }
538  }
539  return true;
540 }
541 
542 string timePointToString(system_clock::time_point point);
543 
544 string timePointToString(const std::chrono::steady_clock::time_point &tp);
545 
546 char *copyStringChars(const string &str);
547 
548 bool stringIsNumber(const string &str);
549 bool stringsAreEqualCaseInsensitive(const string &a, const string &b);
550 bool findSubString(const string str, const string sub);
551 
552 template <typename T>
553 T enforceBounds(T valueToBound, T min, T max) {
554  return valueToBound < min ? min : (valueToBound > max ? max : valueToBound);
555 }
556 
558  float *array = nullptr;
559  unsigned size = 0;
560 };
561 
565 float randomFloat(float aBound, float bBound);
566 
567 const string ALPHABETICAL_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
568 const string ALPHANUMERIC_CHARS = ALPHABETICAL_CHARS + "0123456789";
569 
570 string randomString(size_t length, const string &allowedChars = ALPHANUMERIC_CHARS);
571 string randomUUID();
572 
573 char *longToCharArray(long value);
574 
575 char *concatenateCharArray(const char *a, const char *b);
579 int randomInt(int lowerBound, int upperBound);
580 
581 template <typename T>
582 inline string to_string_precision(const T value, const int n = 2) {
583  std::ostringstream out;
584  out << std::setprecision(n) << std::noshowpoint << value;
585  return out.str();
586 }
587 template <typename T>
588 inline string to_string_precision_float(const T value) { return to_string_precision(value, 7); }
589 
590 template <typename T>
591 inline string to_string_precision_double(const T value) { return to_string_precision(value, 16); }
592 
593 template <typename T>
594 inline string to_string_precision_lngLat(const T value) { return to_string_precision(value, 9); }
595 
596 template <typename T>
597 constexpr size_t size_of() {
598  return reinterpret_cast<char *>(static_cast<T *>(nullptr) + 1) - reinterpret_cast<char *>(static_cast<T *>(nullptr));
599 }
600 
601 template <typename T>
602 void pushInBytes(char *bytes, int &index, T data) {
603  *((T *)(const void *)(bytes + index)) = data;
604  index += size_of<T>();
605 }
606 
608  double *array = nullptr;
609  unsigned size = 0;
610 };
611 
612 template <typename T>
613 T findMinValue(T *array, size_t size) {
614  if (size <= 0) {
615  return T();
616  } // Retourne une valeur par défaut du type T
617  T minValue = array[0];
618  for (int i = 1; i < size; i++) {
619  if (array[i] < minValue) {
620  minValue = array[i];
621  }
622  }
623  return minValue;
624 }
625 
626 template <typename T>
627 T findMaxValue(T *array, size_t size) {
628  if (size <= 0) {
629  return T(); // Retourne une valeur par défaut du type T
630  }
631 
632  T maxValue = array[0];
633  for (int i = 1; i < size; i++) {
634  if (array[i] > maxValue) {
635  maxValue = array[i];
636  }
637  }
638  return maxValue;
639 }
640 
641 template <typename T>
642 T findMinRowValueFromArray(T **array, size_t size, int row) {
643  if (size <= 0) {
644  return T(); // Retourne une valeur par défaut du type T
645  }
646 
647  T minValue = array[0][row];
648  for (int i = 1; i < size; i++) {
649  if (array[i][row] < minValue) {
650  minValue = array[i][row];
651  }
652  }
653  return minValue;
654 }
655 
656 template <typename T>
657 T findMaxRowValueFromArray(T **array, size_t size, int row) {
658  if (size <= 0) {
659  return T(); // Retourne une valeur par défaut du type T
660  }
661 
662  T maxValue = array[0][row];
663  for (int i = 1; i < size; i++) {
664  if (array[i][row] > maxValue) {
665  maxValue = array[i][row];
666  }
667  }
668  return maxValue;
669 }
670 
671 float inchToCentimeter(float inchValue);
672 double inchToCentimeter(double inchValue);
673 
674 string toStringTimestampMillis(unsigned long long timestampInMs, string format);
675 
676 bool doublesEqual(double value1, double value2, double epsilon = 0.0000001);
677 bool floatsEqual(float value1, float value2, float epsilon = 0.0000001);
678 
679 template <typename T>
680 T vectorGetRandomElement(const std::vector<T> *vec) {
681  ASSERT("Cannot get an element from an empty vector.", !vec->empty());
682 
683  std::random_device rd; // Generates a seed for the random number generator
684  std::mt19937 gen(rd()); // Mersenne_twister_engine initialate with rd()
685  std::uniform_int_distribution<> dis(0, vec->size() - 1);
686  return vec->at(dis(gen));
687 }
688 
689 bool stringContainsIgnoreCase(const string &theString, const string &searchedToken);
690 
691 string truncateString(const string &input, size_t maxSize);
692 
696 optional<any> getMapValueByPath(const map<string, any> &data, const string &path);
697 
698 class CscException : public std::exception {
699 public:
700  CscException(const string &errorMessage) noexcept;
701  ~CscException() noexcept override = default;
702  const char *what() const noexcept override;
703  virtual const string &getErrorMessage() const;
704 
705 private:
706  const string errorMessage;
707 };
708 
709 string getClassName(const std::type_info &paramsClass, bool withNamespace);
710 
714 string getStackTrace();
715 
716 string stringPadLeft(const string &input, size_t totalLength, char padChar = ' ');
717 string stringPadRight(const string &input, size_t totalLength, char padChar = ' ');
718 
719 }
720 
721 #endif
conscience_utils::randomInt
int randomInt(int lowerBound, int upperBound)
Definition: conscience_util.cpp:331
conscience_utils::vectorTransform
vector< R > vectorTransform(const vector< T > &source, function< R(const T &item)> transformFunction)
Definition: conscience_util.h:367
conscience_utils::doubleArrayToString
string doubleArrayToString(double *doubleArray, int size)
Definition: conscience_util.cpp:74
conscience_utils::ALPHANUMERIC_CHARS
const string ALPHANUMERIC_CHARS
Definition: conscience_util.h:568
conscience_utils::findMinRowValueFromArray
T findMinRowValueFromArray(T **array, size_t size, int row)
Definition: conscience_util.h:642
nlohmann::to_string
NLOHMANN_BASIC_JSON_TPL_DECLARATION std::string to_string(const NLOHMANN_BASIC_JSON_TPL &j)
user-defined to_string function for JSON values
Definition: json.hpp:26470
conscience_utils::FloatSizedArray
Definition: conscience_util.h:557
conscience_utils::stringsAreEqualCaseInsensitive
bool stringsAreEqualCaseInsensitive(const string &a, const string &b)
Definition: conscience_util.cpp:319
conscience_utils::timestampWithTime
unsigned long long timestampWithTime(optional< int > hours, optional< int > minutes, optional< int > seconds, system_clock::time_point timePoint)
Definition: conscience_util.cpp:278
conscience_utils::FloatSizedArray::size
unsigned size
Definition: conscience_util.h:559
conscience_utils::timePointToString
string timePointToString(system_clock::time_point point)
Definition: conscience_util.cpp:705
conscience_utils::pushInBytes
void pushInBytes(char *bytes, int &index, T data)
Definition: conscience_util.h:602
conscience_utils::intArrayToString
string intArrayToString(int *intArray, int size)
Definition: conscience_util.cpp:86
conscience_utils::mapValues
vector< TValue > mapValues(const map< TKey, TValue > &theMap)
Definition: conscience_util.h:466
conscience_utils::SharedPtrTraits< std::shared_ptr< U > >::pointee_type
U pointee_type
Definition: conscience_util.h:214
conscience_utils::to_string_precision
string to_string_precision(const T value, const int n=2)
Definition: conscience_util.h:582
conscience_utils::randomUUID
string randomUUID()
Definition: conscience_util.cpp:338
conscience_utils::randomFloat
float randomFloat(float aBound, float bBound)
Definition: conscience_util.cpp:390
conscience_utils::parseInt
optional< int > parseInt(const string &inputString)
Definition: conscience_util.cpp:437
conscience_utils::PointeeType< const U *const >::pointee_type
const U pointee_type
Definition: conscience_util.h:197
conscience_utils::to_string_precision_double
string to_string_precision_double(const T value)
Definition: conscience_util.h:591
conscience_utils::timepointWithTime
system_clock::time_point timepointWithTime(optional< int > hours, optional< int > minutes, optional< int > seconds, system_clock::time_point timePoint)
Definition: conscience_util.cpp:258
conscience_utils::vectorCloneDeep
vector< T * > * vectorCloneDeep(const vector< T * > *source)
Definition: conscience_util.h:345
conscience_utils::findMaxRowValueFromArray
T findMaxRowValueFromArray(T **array, size_t size, int row)
Definition: conscience_util.h:657
conscience_utils::startsWithIgnoreCase
bool startsWithIgnoreCase(const string &str, const string &searchedPrefix)
Definition: conscience_util.cpp:484
conscience_utils::snakeCaseToPascalCase
string snakeCaseToPascalCase(const string &snakeCaseString)
Definition: conscience_util.cpp:498
conscience_utils::toStringOrNullString
string toStringOrNullString(T *object)
Definition: conscience_util.h:284
conscience_utils::doublesEqual
bool doublesEqual(double value1, double value2, double epsilon)
Definition: conscience_util.cpp:518
conscience_utils::removeSpacesInString
void removeSpacesInString(string &str)
Definition: conscience_util.cpp:124
conscience_utils::PointeeType< U * >::pointee_type
U pointee_type
Definition: conscience_util.h:176
conscience_utils::stringPadRight
string stringPadRight(const string &input, size_t totalLength, char padChar)
Definition: conscience_util.cpp:699
conscience_utils::nowMillis
unsigned long long nowMillis()
Definition: conscience_util.cpp:294
conscience_utils::floatsEqual
bool floatsEqual(float value1, float value2, float epsilon)
Definition: conscience_util.cpp:522
conscience_utils::splitString
vector< string > * splitString(const string &inputString, const string &delimiter, bool escapeDelimiterWithBackslash)
Definition: conscience_util.cpp:235
conscience_utils::replaceAllInString
bool replaceAllInString(string &str, const string &from, const string &to)
Definition: conscience_util.cpp:120
conscience_utils::PointeeType< U *const >::pointee_type
U pointee_type
Definition: conscience_util.h:190
conscience_core::bridging::commands::metadata::isSharedPtr
static optional< clang::QualType > isSharedPtr(const clang::QualType &rawT)
Definition: CscCommandMetadataBuilder.cpp:699
conscience_utils::IsStdFixedArray
constexpr bool IsStdFixedArray
Definition: conscience_util.h:157
conscience_utils::findMinValue
T findMinValue(T *array, size_t size)
Definition: conscience_util.h:613
conscience_utils::copyStringChars
char * copyStringChars(const string &str)
Definition: conscience_util.cpp:312
conscience_utils::parseDouble
optional< double > parseDouble(const string &inputString)
Definition: conscience_util.cpp:446
conscience_utils::vectorContains
bool vectorContains(const vector< T > &vector, T value)
Definition: conscience_util.h:379
conscience_utils::to_string_precision_lngLat
string to_string_precision_lngLat(const T value)
Definition: conscience_util.h:594
conscience_utils::boolToString
string boolToString(bool value)
Definition: conscience_util.cpp:99
conscience_utils::toStringTimestampMillis
string toStringTimestampMillis(unsigned long long timestampInMs, string format)
Definition: conscience_util.cpp:465
conscience_utils::toStringCurrentTimeWithMillis
string toStringCurrentTimeWithMillis()
Definition: conscience_util.cpp:131
conscience_utils::SharedPtrTraits
Definition: conscience_util.h:205
conscience_utils::DoubleSizedArray::array
double * array
Definition: conscience_util.h:608
conscience_utils::to_string_precision_float
string to_string_precision_float(const T value)
Definition: conscience_util.h:588
conscience_utils::size_of
constexpr size_t size_of()
Definition: conscience_util.h:597
conscience_utils::parseMap
map< string, string > parseMap(string input, const string &entriesSeparator, const string &keyValueSeparator, bool removeGlobalBracketIfExist)
Definition: conscience_util.cpp:216
conscience_utils::enforceBounds
T enforceBounds(T valueToBound, T min, T max)
Definition: conscience_util.h:553
conscience_utils::PointeeType< const U * >::pointee_type
const U pointee_type
Definition: conscience_util.h:183
conscience_utils::trim
string trim(const string &str, const string &trimmedChars)
Definition: conscience_util.cpp:53
conscience_utils::stringRemoveToken
void stringRemoveToken(string &s, const std::string_view &token)
Definition: conscience_util.cpp:726
conscience_utils::getClassName
string getClassName(const type_info &paramsClass, bool withNamespace)
Definition: conscience_util.cpp:593
conscience_utils::vectorsConcat
vector< T > vectorsConcat(const vector< T > &vector1, const vector< T > &vector2)
Definition: conscience_util.h:338
conscience_utils::floatArrayToString
string floatArrayToString(float *floatArray, int size)
Definition: conscience_util.cpp:62
conscience_utils::mapEraseIfExist
void mapEraseIfExist(std::map< TKey, TValue > &theMap, const TKey &key)
Definition: conscience_util.h:491
conscience_utils::IsStarPointer
concept IsStarPointer
Definition: conscience_util.h:202
conscience_utils::PointeeType::isPointer
static constexpr bool isPointer
Definition: conscience_util.h:170
conscience_utils::IsMap
concept IsMap
Definition: conscience_util.h:160
conscience_utils::IsEnum
concept IsEnum
Definition: conscience_util.h:163
conscience_utils::toTimePoint
system_clock::time_point toTimePoint(unsigned long long timestampMillis)
Definition: conscience_util.cpp:298
conscience_utils::concatenateCharArray
char * concatenateCharArray(const char *a, const char *b)
Definition: conscience_util.cpp:421
conscience_utils::toMillis
unsigned long long toMillis(system_clock::time_point timePoint)
Definition: conscience_util.cpp:282
conscience_utils::vectorIndexOf
std::vector< T >::iterator vectorIndexOf(const vector< T > &vector, T value)
Definition: conscience_util.h:374
conscience_utils::randomString
string randomString(size_t length, const string &allowedChars)
Definition: conscience_util.cpp:374
conscience_utils::ALPHABETICAL_CHARS
const string ALPHABETICAL_CHARS
Definition: conscience_util.h:567
conscience_utils::vectorRemoveIf
vector< T > & vectorRemoveIf(vector< T > &theVector, function< bool(const T &)> predicate)
Definition: conscience_util.h:393
conscience_utils::vectorPushIfMissing
void vectorPushIfMissing(vector< T > &vector, T value)
Definition: conscience_util.h:357
conscience_utils::stringIsNumber
bool stringIsNumber(const string &str)
Definition: conscience_util.cpp:303
conscience_utils::mapKeys
vector< TKey > mapKeys(const map< TKey, TValue > &theMap)
Definition: conscience_util.h:437
conscience_utils::DoubleSizedArray::size
unsigned size
Definition: conscience_util.h:609
jwt::alphabet::index
uint32_t index(const std::array< char, 64 > &alphabet, char symbol)
Definition: base.h:91
nlohmann::detail::void
j template void())
Definition: json.hpp:4189
conscience_utils::CscException::what
const char * what() const noexcept override
Definition: conscience_util.cpp:585
conscience_utils::getMapValueByPath
optional< any > getMapValueByPath(const map< string, any > &data, const string &path)
Definition: conscience_util.cpp:542
conscience_utils::findMaxValue
T findMaxValue(T *array, size_t size)
Definition: conscience_util.h:627
conscience_utils::parseFloatList
vector< float > * parseFloatList(string input, char separator)
Definition: conscience_util.cpp:192
conscience_utils::findSubString
bool findSubString(const string str, const string sub)
Definition: conscience_util.cpp:327
conscience_utils::CannotParseEnumException
Definition: conscience_util.h:220
conscience_utils::DoubleSizedArray
Definition: conscience_util.h:607
source
const char * source
Definition: lz4.h:807
conscience_utils::CscException::getErrorMessage
virtual const string & getErrorMessage() const
Definition: conscience_util.cpp:589
conscience_utils::truncateString
string truncateString(const string &input, size_t maxSize)
Definition: conscience_util.cpp:535
conscience_utils::SharedPtrTraits::pointee_type
void pointee_type
Definition: conscience_util.h:207
conscience_utils::stringPadLeft
string stringPadLeft(const string &input, size_t totalLength, char padChar)
Definition: conscience_util.cpp:692
conscience_core::bridging::commands::environment_objects::optional< double >
const ptr< CscObjectModel > const string const CscPoint3d const CscPoint3d optional< double >
Definition: environmentObjectsCommands.h:367
conscience_utils::IsTemplatedType
constexpr bool IsTemplatedType
Definition: conscience_util.h:135
conscience_utils::CscException::~CscException
~CscException() noexcept override=default
conscience_utils::CannotParseEnumException::CannotParseEnumException
CannotParseEnumException(const string &s)
Definition: conscience_util.h:222
conscience_utils
Definition: CscEntityReflexion.h:50
conscience_utils::mapValuesConst
vector< TValue > mapValuesConst(const map< TKey, const TValue > &theMap)
Definition: conscience_util.h:453
conscience_utils::vectorOfPointerToConst
vector< const T * > * vectorOfPointerToConst(vector< T * > *theVector)
Definition: conscience_util.h:318
conscience_utils::IsSharedPointer
concept IsSharedPointer
Definition: conscience_util.h:218
std
Definition: json.hpp:4598
conscience_utils::areMapsEqual
bool areMapsEqual(const map< TKey, TValue > &map1, const map< TKey, TValue > &map2)
Definition: conscience_util.h:429
picojson::copy
void copy(const std::string &s, Iter oi)
Definition: picojson.h:525
conscience_utils::diffMillis
unsigned long long diffMillis(system_clock::time_point timePoint1, system_clock::time_point timePoint2)
Definition: conscience_util.cpp:288
picojson::array
value::array array
Definition: picojson.h:209
conscience_utils::PointeeType
Definition: conscience_util.h:167
conscience_utils::vectorRemove
vector< T > & vectorRemove(vector< T > &theVector, const T &item)
Definition: conscience_util.h:410
conscience_utils::vectorGetRandomElement
T vectorGetRandomElement(const std::vector< T > *vec)
Definition: conscience_util.h:680
conscience_utils::CscException::CscException
CscException(const string &errorMessage) noexcept
Definition: conscience_util.cpp:582
conscience_utils::inchToCentimeter
float inchToCentimeter(float inchValue)
Definition: conscience_util.cpp:455
conscience_utils::IsVector
concept IsVector
Definition: conscience_util.h:147
conscience_utils::keyOfValueInMap
const optional< K > keyOfValueInMap(const map< K, V > *map, V searchedValue)
Definition: conscience_util.h:419
ASSERT
#define ASSERT(MSG, EXPR)
Definition: conscience_util.h:43
s
double s
Definition: HybridAStar.cpp:85
conscience_utils::vectorToString
string vectorToString(const vector< T > &vector, const char *separator=",")
Definition: conscience_util.h:302
conscience_utils::IsPointerOf
concept IsPointerOf
Definition: conscience_util.h:129
conscience_utils::mapToString
string mapToString(const map< K, V > &theMap, const string &entriesSeparator=",", const string &keyValueSeparator="=")
Definition: conscience_util.h:502
conscience_utils::getStackTrace
string getStackTrace()
Definition: conscience_util.cpp:611
conscience_utils::toStringDateAndTime
string toStringDateAndTime()
Definition: conscience_util.cpp:162
conscience_utils::FloatSizedArray::array
float * array
Definition: conscience_util.h:558
conscience_utils::parseIntList
vector< int > * parseIntList(string input, char separator)
Definition: conscience_util.cpp:204
conscience_utils::SharedPtrTraits::isSharedPtr
static constexpr bool isSharedPtr
Definition: conscience_util.h:206
conscience_utils::toLowerCase
string toLowerCase(string &str)
Definition: conscience_util.cpp:474
conscience_utils::longToCharArray
char * longToCharArray(long value)
Definition: conscience_util.cpp:406
conscience_utils::ALL_SPACES_STRING
static const string ALL_SPACES_STRING
Definition: conscience_util.h:225
conscience_utils::equals
bool equals(const map< K, V > &map1, const map< K, V > &map2)
Definition: conscience_util.h:527
conscience_utils::toUpperCase
string toUpperCase(string &str)
Definition: conscience_util.cpp:479
conscience_utils::PointeeType::pointee_type
void pointee_type
Definition: conscience_util.h:169
conscience_utils::stringContainsIgnoreCase
bool stringContainsIgnoreCase(const string &theString, const string &searchedToken)
Definition: conscience_util.cpp:526
conscience_utils::replaceInString
bool replaceInString(string &str, const string &from, const string &to, bool onlyFirst)
Definition: conscience_util.cpp:103
conscience_utils::IsStdFixedArrayStruct
Definition: conscience_util.h:150
conscience_utils::IsOptional
concept IsOptional
Definition: conscience_util.h:144
conscience_utils::CscException
Definition: conscience_util.h:698
i
int i
Definition: HybridAStar.cpp:191