#pragma once

#include <sstream>

#include "common.hpp"

LEMONBUDDY_NS

namespace string_util {
  /**
   * Hash type
   */
  using hash_type = unsigned long;

  bool contains(const string& haystack, const string& needle);
  string upper(const string& s);
  string lower(const string& s);
  bool compare(const string& s1, const string& s2);
  string replace(const string& haystack, string needle, string replacement);
  string replace_all(const string& haystack, string needle, string replacement);
  string squeeze(const string& haystack, char needle);
  string strip(const string& haystack, char needle);
  string strip_trailing_newline(const string& haystack);
  string ltrim(const string& haystack, char needle);
  string rtrim(const string& haystack, char needle);
  string trim(const string& haystack, char needle);
  string join(vector<string> strs, string delim);
  vector<string>& split_into(string s, char delim, vector<string>& container);
  vector<string> split(const string& s, char delim);
  size_t find_nth(string haystack, size_t pos, string needle, size_t nth);
  string from_stream(const std::basic_ostream<char>& os);
  hash_type hash(string src);
}

LEMONBUDDY_NS_END