Newer
Older
Import / applications / HighwayDash / ports / Framework / Delegates / ConstString.h
@John Ryland John Ryland on 22 Dec 2020 751 bytes import NUC files




//
// literal string wrapper class
//   From: http://en.cppreference.com/w/cpp/language/constexpr
//
class conststr
{
public:
  template <std::size_t N>
  constexpr conststr(const char(&a)[N]) : p(a), sz(N - 1) {}

  // constexpr functions signal errors by throwing exceptions
  // in C++11, they must do so from the conditional operator ?:
  constexpr char operator[](std::size_t n) const
  {
    return n < sz ? p[n] : throw std::out_of_range("");
  }

  constexpr std::size_t size() const { return sz; }

  //This method is related with Fowler–Noll–Vo hash function
  constexpr unsigned hash(int n=0, unsigned h=2166136261)
  {
    return n == sz ? h : hash(n+1,(h * 16777619) ^ (p[n]));
  }

private:
  const char* p;
  std::size_t sz;
};