1f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath#ifndef MARISA_QUERY_H_ 2f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath#define MARISA_QUERY_H_ 3f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 4f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath#include <string> 5f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 6f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath#include "base.h" 7f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 8f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamathnamespace marisa { 9f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 10f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamathclass Query { 11f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath public: 12f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath Query(const char *ptr, std::size_t length) : ptr_(ptr), length_(length) {} 13f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath Query(const Query &query) : ptr_(query.ptr_), length_(query.length_) {} 14f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 15f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath void insert(std::string *str) const { 16f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath str->insert(0, ptr_, length_); 17f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath } 18f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 19f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath UInt8 operator[](std::size_t i) const { 20f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath MARISA_DEBUG_IF(i >= length_, MARISA_PARAM_ERROR); 21f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath return ptr_[i]; 22f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath } 23f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath bool ends_at(std::size_t i) const { 24f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath MARISA_DEBUG_IF(i > length_, MARISA_PARAM_ERROR); 25f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath return i == length_; 26f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath } 27f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 28f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath private: 29f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath const char *ptr_; 30f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath std::size_t length_; 31f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 32f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath // Disallows assignment. 33f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath Query &operator=(const Query &query); 34f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath}; 35f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 36f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamathclass CQuery { 37f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath public: 38f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath explicit CQuery(const char *str) : str_(str) {} 39f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath CQuery(const CQuery &query) : str_(query.str_) {} 40f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 41f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath void insert(std::string *str) const { 42f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath str->insert(0, str_); 43f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath } 44f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 45f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath UInt8 operator[](std::size_t i) const { 46f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath return str_[i]; 47f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath } 48f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath bool ends_at(std::size_t i) const { 49f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath return str_[i] == '\0'; 50f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath } 51f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 52f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath private: 53f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath const char *str_; 54f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 55f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath // Disallows assignment. 56f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath CQuery &operator=(const CQuery &); 57f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath}; 58f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 59f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath} // namespace marisa 60f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath 61f163f6985a63328d07e3de249ad3daf4a0c67d8aNarayan Kamath#endif // MARISA_QUERY_H_ 62