about summary refs log tree commit diff stats
path: root/vendor/nlohmann
Commit message (Collapse)AuthorAgeFilesLines
* Tracker connects to AP nowStar Rauchenberger2023-05-021-0/+24596
n46' href='#n46'>46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
#ifndef UTIL_H_CED7A66D
#define UTIL_H_CED7A66D

#include <algorithm>
#include <string>
#include <iterator>
#include <cctype>
#include <sstream>

namespace hatkirby {

  inline std::string uppercase(std::string in)
  {
    std::string result;

    std::transform(
      std::begin(in),
      std::end(in),
      std::back_inserter(result),
      [] (char ch)
      {
        return std::toupper(ch);
      });

    return result;
  }

  inline std::string lowercase(std::string in)
  {
    std::string result;

    std::transform(
      std::begin(in),
      std::end(in),
      std::back_inserter(result),
      [] (char ch)
      {
        return std::tolower(ch);
      });

    return result;
  }

  template <class InputIterator>
  std::string implode(
    InputIterator first,
    InputIterator last,
    std::string delimiter)
  {
    std::stringstream result;

    for (InputIterator it = first; it != last; it++)
    {
      if (it != first)
      {
        result << delimiter;
      }

      result << *it;
    }

    return result.str();
  }

  template <class Container>
  std::string implode(
    const Container& container,
    std::string delimiter)
  {
    return implode(container.begin(), container.end(), delimiter);
  }

  template <class OutputIterator>
  void split(
    std::string input,
    std::string delimiter,
    OutputIterator out)
  {
    while (!input.empty())
    {
      int divider = input.find(delimiter);
      if (divider == std::string::npos)
      {
        *out = input;
        out++;

        input = "";
      } else {
        *out = input.substr(0, divider);
        out++;

        input = input.substr(divider+delimiter.length());
      }
    }
  }

  template <class Container>
  Container split(
    std::string input,
    std::string delimiter)
  {
    Container result;

    split(input, delimiter, std::back_inserter(result));

    return result;
  }

};

#endif /* end of include guard: UTIL_H_CED7A66D */