#ifndef MARISA_ALPHA_QUERY_H_
#define MARISA_ALPHA_QUERY_H_
#include <string>
#include "base.h"
namespace marisa_alpha {
class Query {
public:
Query(const char *ptr, std::size_t length) : ptr_(ptr), length_(length) {}
Query(const Query &query) : ptr_(query.ptr_), length_(query.length_) {}
void insert(std::string *str) const {
str->insert(0, ptr_, length_);
}
UInt8 operator[](std::size_t i) const {
MARISA_ALPHA_DEBUG_IF(i >= length_, MARISA_ALPHA_PARAM_ERROR);
return ptr_[i];
}
bool ends_at(std::size_t i) const {
MARISA_ALPHA_DEBUG_IF(i > length_, MARISA_ALPHA_PARAM_ERROR);
return i == length_;
}
private:
const char *ptr_;
std::size_t length_;
// Disallows assignment.
Query &operator=(const Query &query);
};
class CQuery {
public:
explicit CQuery(const char *str) : str_(str) {}
CQuery(const CQuery &query) : str_(query.str_) {}
void insert(std::string *str) const {
str->insert(0, str_);
}
UInt8 operator[](std::size_t i) const {
return str_[i];
}
bool ends_at(std::size_t i) const {
return str_[i] == '\0';
}
private:
const char *str_;
// Disallows assignment.
CQuery &operator=(const CQuery &);
};
} // namespace marisa_alpha
#endif // MARISA_ALPHA_QUERY_H_