Blame bindings/marisa-swig.cxx

Packit de3218
#include <cstring>
Packit de3218
#include <new>
Packit de3218
Packit de3218
#include "marisa-swig.h"
Packit de3218
Packit de3218
namespace marisa_swig {
Packit de3218
Packit de3218
void Key::str(const char **ptr_out, size_t *length_out) const {
Packit de3218
  *ptr_out = key_.ptr();
Packit de3218
  *length_out = key_.length();
Packit de3218
}
Packit de3218
Packit de3218
size_t Key::id() const {
Packit de3218
  return key_.id();
Packit de3218
}
Packit de3218
Packit de3218
float Key::weight() const {
Packit de3218
  return key_.weight();
Packit de3218
}
Packit de3218
Packit de3218
void Query::str(const char **ptr_out, size_t *length_out) const {
Packit de3218
  *ptr_out = query_.ptr();
Packit de3218
  *length_out = query_.length();
Packit de3218
}
Packit de3218
Packit de3218
size_t Query::id() const {
Packit de3218
  return query_.id();
Packit de3218
}
Packit de3218
Packit de3218
Keyset::Keyset() : keyset_(new (std::nothrow) marisa::Keyset) {
Packit de3218
  MARISA_THROW_IF(keyset_ == NULL, ::MARISA_MEMORY_ERROR);
Packit de3218
}
Packit de3218
Packit de3218
Keyset::~Keyset() {
Packit de3218
  delete keyset_;
Packit de3218
}
Packit de3218
Packit de3218
void Keyset::push_back(const marisa::Key &key) {
Packit de3218
  keyset_->push_back(key);
Packit de3218
}
Packit de3218
Packit de3218
void Keyset::push_back(const char *ptr, size_t length, float weight) {
Packit de3218
  keyset_->push_back(ptr, length, weight);
Packit de3218
}
Packit de3218
Packit de3218
const Key &Keyset::key(size_t i) const {
Packit de3218
  return reinterpret_cast<const Key &>((*keyset_)[i]);
Packit de3218
}
Packit de3218
Packit de3218
void Keyset::key_str(size_t i,
Packit de3218
    const char **ptr_out, size_t *length_out) const {
Packit de3218
  *ptr_out = (*keyset_)[i].ptr();
Packit de3218
  *length_out = (*keyset_)[i].length();
Packit de3218
}
Packit de3218
Packit de3218
size_t Keyset::key_id(size_t i) const {
Packit de3218
  return (*keyset_)[i].id();
Packit de3218
}
Packit de3218
Packit de3218
size_t Keyset::num_keys() const {
Packit de3218
  return keyset_->num_keys();
Packit de3218
}
Packit de3218
Packit de3218
bool Keyset::empty() const {
Packit de3218
  return keyset_->empty();
Packit de3218
}
Packit de3218
Packit de3218
size_t Keyset::size() const {
Packit de3218
  return keyset_->size();
Packit de3218
}
Packit de3218
Packit de3218
size_t Keyset::total_length() const {
Packit de3218
  return keyset_->total_length();
Packit de3218
}
Packit de3218
Packit de3218
void Keyset::reset() {
Packit de3218
  keyset_->reset();
Packit de3218
}
Packit de3218
Packit de3218
void Keyset::clear() {
Packit de3218
  keyset_->clear();
Packit de3218
}
Packit de3218
Packit de3218
Agent::Agent()
Packit de3218
    : agent_(new (std::nothrow) marisa::Agent), buf_(NULL), buf_size_(0) {
Packit de3218
  MARISA_THROW_IF(agent_ == NULL, ::MARISA_MEMORY_ERROR);
Packit de3218
}
Packit de3218
Packit de3218
Agent::~Agent() {
Packit de3218
  delete agent_;
Packit de3218
  delete [] buf_;
Packit de3218
}
Packit de3218
Packit de3218
void Agent::set_query(const char *ptr, size_t length) {
Packit de3218
  if (length > buf_size_) {
Packit de3218
    size_t new_buf_size = (buf_size_ != 0) ? buf_size_ : 1;
Packit de3218
    if (length >= (MARISA_SIZE_MAX / 2)) {
Packit de3218
      new_buf_size = MARISA_SIZE_MAX;
Packit de3218
    } else {
Packit de3218
      while (new_buf_size < length) {
Packit de3218
        new_buf_size *= 2;
Packit de3218
      }
Packit de3218
    }
Packit de3218
    char *new_buf = new (std::nothrow) char[new_buf_size];
Packit de3218
    MARISA_THROW_IF(new_buf == NULL, MARISA_MEMORY_ERROR);
Packit de3218
    delete [] buf_;
Packit de3218
    buf_ = new_buf;
Packit de3218
    buf_size_ = new_buf_size;
Packit de3218
  }
Packit de3218
  std::memcpy(buf_, ptr, length);
Packit de3218
  agent_->set_query(buf_, length);
Packit de3218
}
Packit de3218
Packit de3218
void Agent::set_query(size_t id) {
Packit de3218
  agent_->set_query(id);
Packit de3218
}
Packit de3218
Packit de3218
const Key &Agent::key() const {
Packit de3218
  return reinterpret_cast<const Key &>(agent_->key());
Packit de3218
}
Packit de3218
Packit de3218
const Query &Agent::query() const {
Packit de3218
  return reinterpret_cast<const Query &>(agent_->query());
Packit de3218
}
Packit de3218
Packit de3218
void Agent::key_str(const char **ptr_out, size_t *length_out) const {
Packit de3218
  *ptr_out = agent_->key().ptr();
Packit de3218
  *length_out = agent_->key().length();
Packit de3218
}
Packit de3218
Packit de3218
size_t Agent::key_id() const {
Packit de3218
  return agent_->key().id();
Packit de3218
}
Packit de3218
Packit de3218
void Agent::query_str(const char **ptr_out, size_t *length_out) const {
Packit de3218
  *ptr_out = agent_->query().ptr();
Packit de3218
  *length_out = agent_->query().length();
Packit de3218
}
Packit de3218
Packit de3218
size_t Agent::query_id() const {
Packit de3218
  return agent_->query().id();
Packit de3218
}
Packit de3218
Packit de3218
Trie::Trie() : trie_(new (std::nothrow) marisa::Trie) {
Packit de3218
  MARISA_THROW_IF(trie_ == NULL, ::MARISA_MEMORY_ERROR);
Packit de3218
}
Packit de3218
Packit de3218
Trie::~Trie() {
Packit de3218
  delete trie_;
Packit de3218
}
Packit de3218
Packit de3218
void Trie::build(Keyset &keyset, int config_flags) {
Packit de3218
  trie_->build(*keyset.keyset_, config_flags);
Packit de3218
}
Packit de3218
Packit de3218
void Trie::mmap(const char *filename) {
Packit de3218
  trie_->mmap(filename);
Packit de3218
}
Packit de3218
Packit de3218
void Trie::load(const char *filename) {
Packit de3218
  trie_->load(filename);
Packit de3218
}
Packit de3218
Packit de3218
void Trie::save(const char *filename) const {
Packit de3218
  trie_->save(filename);
Packit de3218
}
Packit de3218
Packit de3218
bool Trie::lookup(Agent &agent) const {
Packit de3218
  return trie_->lookup(*agent.agent_);
Packit de3218
}
Packit de3218
Packit de3218
void Trie::reverse_lookup(Agent &agent) const {
Packit de3218
  trie_->reverse_lookup(*agent.agent_);
Packit de3218
}
Packit de3218
Packit de3218
bool Trie::common_prefix_search(Agent &agent) const {
Packit de3218
  return trie_->common_prefix_search(*agent.agent_);
Packit de3218
}
Packit de3218
Packit de3218
bool Trie::predictive_search(Agent &agent) const {
Packit de3218
  return trie_->predictive_search(*agent.agent_);
Packit de3218
}
Packit de3218
Packit de3218
size_t Trie::lookup(const char *ptr, size_t length) const {
Packit de3218
  marisa::Agent agent;
Packit de3218
  agent.set_query(ptr, length);
Packit de3218
  if (!trie_->lookup(agent)) {
Packit de3218
    return MARISA_INVALID_KEY_ID;
Packit de3218
  }
Packit de3218
  return agent.key().id();
Packit de3218
}
Packit de3218
Packit de3218
void Trie::reverse_lookup(size_t id,
Packit de3218
    const char **ptr_out_to_be_deleted, size_t *length_out) const {
Packit de3218
  marisa::Agent agent;
Packit de3218
  agent.set_query(id);
Packit de3218
  trie_->reverse_lookup(agent);
Packit de3218
  char * const buf = new (std::nothrow) char[agent.key().length()];
Packit de3218
  MARISA_THROW_IF(buf == NULL, MARISA_MEMORY_ERROR);
Packit de3218
  std::memcpy(buf, agent.key().ptr(), agent.key().length());
Packit de3218
  *ptr_out_to_be_deleted = buf;
Packit de3218
  *length_out = agent.key().length();
Packit de3218
}
Packit de3218
Packit de3218
size_t Trie::num_tries() const {
Packit de3218
  return trie_->num_tries();
Packit de3218
}
Packit de3218
Packit de3218
size_t Trie::num_keys() const {
Packit de3218
  return trie_->num_keys();
Packit de3218
}
Packit de3218
Packit de3218
size_t Trie::num_nodes() const {
Packit de3218
  return trie_->num_nodes();
Packit de3218
}
Packit de3218
Packit de3218
TailMode Trie::tail_mode() const {
Packit de3218
  if (trie_->tail_mode() == ::MARISA_TEXT_TAIL) {
Packit de3218
    return TEXT_TAIL;
Packit de3218
  } else {
Packit de3218
    return BINARY_TAIL;
Packit de3218
  }
Packit de3218
}
Packit de3218
Packit de3218
NodeOrder Trie::node_order() const {
Packit de3218
  if (trie_->node_order() == ::MARISA_LABEL_ORDER) {
Packit de3218
    return LABEL_ORDER;
Packit de3218
  } else {
Packit de3218
    return WEIGHT_ORDER;
Packit de3218
  }
Packit de3218
}
Packit de3218
Packit de3218
bool Trie::empty() const {
Packit de3218
  return trie_->empty();
Packit de3218
}
Packit de3218
Packit de3218
size_t Trie::size() const {
Packit de3218
  return trie_->size();
Packit de3218
}
Packit de3218
Packit de3218
size_t Trie::total_size() const {
Packit de3218
  return trie_->total_size();
Packit de3218
}
Packit de3218
Packit de3218
size_t Trie::io_size() const {
Packit de3218
  return trie_->io_size();
Packit de3218
}
Packit de3218
Packit de3218
void Trie::clear() {
Packit de3218
  trie_->clear();
Packit de3218
}
Packit de3218
Packit de3218
}  // namespace marisa_swig