示例#1
0
文件: float.cpp 项目: groonga/grnxx
Int Column<Float>::scan(Float value) const {
  if (table_->max_row_id().is_na()) {
    return Int::na();
  }
  size_t table_size = table_->max_row_id().raw() + 1;
  size_t valid_size =
      (values_.size() < table_size) ? values_.size() : table_size;
  if (value.is_na()) {
    if (values_.size() < table_size) {
      return table_->max_row_id();
    }
    bool is_full = table_->is_full();
    for (size_t i = 0; i < valid_size; ++i) {
      if (values_[i].is_na() && (is_full || table_->_test_row(i))) {
        return Int(i);
      }
    }
  } else {
    for (size_t i = 0; i < valid_size; ++i) {
      if (values_[i].match(value)) {
        return Int(i);
      }
    }
  }
  return Int::na();
}
示例#2
0
文件: float.cpp 项目: groonga/grnxx
Int Column<Float>::find_one(const Datum &datum) const {
  // TODO: Choose the best index.
  Float value = parse_datum(datum);
  if (!value.is_na() && !indexes_.is_empty()) {
    return indexes_[0]->find_one(datum);
  }
  return scan(value);
}
示例#3
0
文件: float.cpp 项目: groonga/grnxx
void Column<Float>::unset(Int row_id) {
  Float value = get(row_id);
  if (!value.is_na()) {
    // Update indexes if exist.
    for (size_t i = 0; i < num_indexes(); ++i) {
      indexes_[i]->remove(row_id, value);
    }
    values_[row_id.raw()] = Float::na();
  }
}
示例#4
0
文件: float.cpp 项目: groonga/grnxx
bool Column<Float>::contains(const Datum &datum) const {
  // TODO: Choose the best index.
  Float value = parse_datum(datum);
  if (!indexes_.is_empty()) {
    if (value.is_na()) {
      return table_->num_rows() != indexes_[0]->num_entries();
    }
    return indexes_[0]->contains(datum);
  }
  return !scan(value).is_na();
}