| #ifndef MARISA_QUERY_H_ |
| #define MARISA_QUERY_H_ |
| |
| #include "marisa/base.h" |
| |
| namespace marisa { |
| |
| class Query { |
| public: |
| Query() : ptr_(NULL), length_(0), id_(0) {} |
| Query(const Query &query) |
| : ptr_(query.ptr_), length_(query.length_), id_(query.id_) {} |
| |
| Query &operator=(const Query &query) { |
| ptr_ = query.ptr_; |
| length_ = query.length_; |
| id_ = query.id_; |
| return *this; |
| } |
| |
| char operator[](std::size_t i) const { |
| MARISA_DEBUG_IF(i >= length_, MARISA_BOUND_ERROR); |
| return ptr_[i]; |
| } |
| |
| void set_str(const char *str) { |
| MARISA_DEBUG_IF(str == NULL, MARISA_NULL_ERROR); |
| std::size_t length = 0; |
| while (str[length] != '\0') { |
| ++length; |
| } |
| ptr_ = str; |
| length_ = length; |
| } |
| void set_str(const char *ptr, std::size_t length) { |
| MARISA_DEBUG_IF((ptr == NULL) && (length != 0), MARISA_NULL_ERROR); |
| ptr_ = ptr; |
| length_ = length; |
| } |
| void set_id(std::size_t id) { |
| id_ = id; |
| } |
| |
| const char *ptr() const { |
| return ptr_; |
| } |
| std::size_t length() const { |
| return length_; |
| } |
| std::size_t id() const { |
| return id_; |
| } |
| |
| void clear() { |
| Query().swap(*this); |
| } |
| void swap(Query &rhs) { |
| marisa::swap(ptr_, rhs.ptr_); |
| marisa::swap(length_, rhs.length_); |
| marisa::swap(id_, rhs.id_); |
| } |
| |
| private: |
| const char *ptr_; |
| std::size_t length_; |
| std::size_t id_; |
| }; |
| |
| } // namespace marisa |
| |
| #endif // MARISA_QUERY_H_ |