| 27 | }; |
| 28 | |
| 29 | struct string_ref { |
| 30 | typedef const char value_type; |
| 31 | const char *begin() const { return start; } |
| 32 | const char *end() const { return start + length; } |
| 33 | size_t size() const { return length; } |
| 34 | private: |
| 35 | const char *start; |
| 36 | size_t length; |
| 37 | public: |
| 38 | string_ref(const char *s = 0, size_t len = 0) : start(s), length(len) { } |
| 39 | string_ref(const char *s, const char *f) : start(s), length(f - s) { } |
| 40 | string_ref(const string_wref& w) : start(w.begin()), length(w.size()) { } |
| 41 | }; |
| 42 | |
| 43 | template <size_t N> inline bool |
| 44 | operator ==(const string_ref& x, const char (& y)[N]) { |
no outgoing calls