summary refs log tree commit diff stats
path: root/rails/test/dummy/db/migrate
diff options
context:
space:
mode:
Diffstat (limited to 'rails/test/dummy/db/migrate')
0 files changed, 0 insertions, 0 deletions
#n64'>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 */