diff options
author | ipknHama <ipknhama@gmail.com> | 2014-04-03 05:31:32 +0900 |
---|---|---|
committer | ipknHama <ipknhama@gmail.com> | 2014-04-03 08:29:22 +0900 |
commit | d533a619c99c5ead31e86afd14dd9b017c63a9ab (patch) | |
tree | 3afcd6fd4ddb83ea623fbba374a011ff40042659 /utility.h | |
parent | 5e5d69688435ffe8fc148af73fe33b029d9f6110 (diff) | |
download | crow-d533a619c99c5ead31e86afd14dd9b017c63a9ab.tar.gz crow-d533a619c99c5ead31e86afd14dd9b017c63a9ab.zip |
routing class working version
Diffstat (limited to 'utility.h')
-rw-r--r-- | utility.h | 15 |
1 files changed, 7 insertions, 8 deletions
@@ -14,37 +14,36 @@ namespace flask } // from http://akrzemi1.wordpress.com/2011/05/11/parsing-strings-at-compile-time-part-i/ - class StrWrap + class const_str { const char * const begin_; unsigned size_; public: template< unsigned N > - constexpr StrWrap( const char(&arr)[N] ) : begin_(arr), size_(N - 1) { + constexpr const_str( const char(&arr)[N] ) : begin_(arr), size_(N - 1) { static_assert( N >= 1, "not a string literal"); } - - constexpr char operator[]( unsigned i ) { + constexpr char operator[]( unsigned i ) const { return requires_in_range(i, size_), begin_[i]; } - constexpr operator const char *() { + constexpr operator const char *() const { return begin_; } - constexpr unsigned size() { + constexpr unsigned size() const { return size_; } }; - constexpr int find_closing_tag(StrWrap s, std::size_t p) + constexpr unsigned find_closing_tag(const_str s, unsigned p) { return s[p] == '>' ? p : find_closing_tag(s, p+1); } - constexpr int count(StrWrap s, int i=0) + constexpr int count(const_str s, int i=0) { return i == s.size() ? 0 : s[i] == '<' ? 1+count(s,i+1) : count(s,i+1); } |