Пример #1
0
static int find_one(h5item *item, char *findname, hid_t *obj, int *item_type)
{
  int status = 0;
  char *name = strcpy(malloc(strlen(item->name)+1),item->name);
  char *tmp;
  h5item *itm;
  for (itm = item->parent; itm; itm=itm->parent) {
    tmp = malloc(strlen(name)+strlen(itm->name)+2);
    strcpy(tmp,itm->name);
    strcat(tmp,"/");
    strcat(tmp,name);
    free(name);
    name = tmp;
  }
  if (item->item_type == H5G_DATASET || item->item_type == -1)
  {
    if (strcmp(findname,name) == 0)
    {
      *obj = item->obj;
      *item_type = item->item_type;
      status = 1;
    }
  }
  free(name);
  if ((!status) && item->attribute)
    status = find_one(item->attribute,findname,obj,item_type);
  if ((!status) && item->child)
    status = find_one(item->child,findname,obj,item_type);
  if ((!status) && item->brother)
    status = find_one(item->brother,findname,obj,item_type);
  return status;
}
Пример #2
0
static int FindItem(char *namein, hid_t *obj, int *item_type)
{
  int status;
  int i;
  char *name = strcpy(malloc(strlen(namein)+1),namein);
  for (i=strlen(name)-1;i >= 0; i--) if (name[i] == 32) name[i]=0; else break;
  status = find_one(current,name,obj,item_type);
  free(name);
  return status;
}
Пример #3
0
// Recursive search through the whole tree until name is found
PropertyStream::Source* PropertyStream::Source::find_one_deep (std::string const& name)
{
    Source* found = find_one (name);
    if (found != nullptr)
        return found;
    SharedState::Access state (this->m_state);
    for (auto iter : state->children)
    {
        found = iter.source().find_one_deep (name);
        if (found != nullptr)
            return found;
    }
    return nullptr;
}
Пример #4
0
void test_find_one() {
  // Create a table and insert rows.
  auto db = grnxx::open_db("");
  auto table = db->create_table("Table");
  table->insert_row();
  table->insert_row();
  table->insert_row();

  auto column = table->create_column("Int", GRNXX_INT);
  assert(column->find_one(grnxx::Int(123)).is_na());
  assert(column->find_one(grnxx::Int(456)).is_na());
  assert(column->find_one(grnxx::Int(789)).is_na());
  assert(!column->find_one(grnxx::Int::na()).is_na());
  column->set(grnxx::Int(0), grnxx::Int(123));
  assert(!column->find_one(grnxx::Int(123)).is_na());
  assert(column->find_one(grnxx::Int(456)).is_na());
  assert(column->find_one(grnxx::Int(789)).is_na());
  assert(!column->find_one(grnxx::Int::na()).is_na());
  column->set(grnxx::Int(1), grnxx::Int(456));
  assert(!column->find_one(grnxx::Int(123)).is_na());
  assert(!column->find_one(grnxx::Int(456)).is_na());
  assert(column->find_one(grnxx::Int(789)).is_na());
  assert(!column->find_one(grnxx::Int::na()).is_na());
  column->set(grnxx::Int(2), grnxx::Int(789));
  assert(!column->find_one(grnxx::Int(123)).is_na());
  assert(!column->find_one(grnxx::Int(456)).is_na());
  assert(!column->find_one(grnxx::Int(789)).is_na());
  assert(column->find_one(grnxx::Int::na()).is_na());

  column->create_index("Index", GRNXX_TREE_INDEX);
  assert(!column->find_one(grnxx::Int(123)).is_na());
  assert(!column->find_one(grnxx::Int(456)).is_na());
  assert(!column->find_one(grnxx::Int(789)).is_na());
  assert(column->find_one(grnxx::Int::na()).is_na());
  column->set(grnxx::Int(2), grnxx::Int::na());
  assert(!column->find_one(grnxx::Int(123)).is_na());
  assert(!column->find_one(grnxx::Int(456)).is_na());
  assert(column->find_one(grnxx::Int(789)).is_na());
  assert(!column->find_one(grnxx::Int::na()).is_na());
  column->set(grnxx::Int(1), grnxx::Int::na());
  assert(!column->find_one(grnxx::Int(123)).is_na());
  assert(column->find_one(grnxx::Int(456)).is_na());
  assert(column->find_one(grnxx::Int(789)).is_na());
  assert(!column->find_one(grnxx::Int::na()).is_na());
  column->set(grnxx::Int(0), grnxx::Int::na());
  assert(column->find_one(grnxx::Int(123)).is_na());
  assert(column->find_one(grnxx::Int(456)).is_na());
  assert(column->find_one(grnxx::Int(789)).is_na());
  assert(!column->find_one(grnxx::Int::na()).is_na());
}
Пример #5
0
void test_contains_and_find_one() {
  constexpr size_t NUM_ROWS = 1 << 10;

  // Create a table and insert the first row.
  auto db = grnxx::open_db("");
  auto table = db->create_table("Table");
  auto column = table->create_column("Column", T::type());
  grnxx::Array<T> values;
  values.resize(NUM_ROWS);
  for (size_t i = 0; i < NUM_ROWS; ++i) {
    generate_random_value(&values[i]);
    grnxx::Int row_id = table->insert_row();
    column->set(row_id, values[i]);
  }

  // Test all the values.
  for (size_t i = 0; i < NUM_ROWS; ++i) {
    assert(column->contains(values[i]));
    grnxx::Int row_id = column->find_one(values[i]);
    assert(!row_id.is_na());
    assert(values[i].match(values[row_id.raw()]));
  }

  // Test all the values with index if available.
  try {
    column->create_index("Index", GRNXX_TREE_INDEX);
    for (size_t i = 0; i < NUM_ROWS; ++i) {
      assert(column->contains(values[i]));
      grnxx::Int row_id = column->find_one(values[i]);
      assert(!row_id.is_na());
      assert(values[i].match(values[row_id.raw()]));
    }
    column->remove_index("Index");
  } catch (...) {
  }

  // Remove N/A values.
  for (size_t i = 0; i < NUM_ROWS; ++i) {
    if (values[i].is_na()) {
      table->remove_row(grnxx::Int(i));
    }
  }

  // Test all the values.
  for (size_t i = 0; i < NUM_ROWS; ++i) {
    if (!values[i].is_na()) {
      assert(column->contains(values[i]));
      grnxx::Int row_id = column->find_one(values[i]);
      assert(!row_id.is_na());
      assert(values[i].match(values[row_id.raw()]));
    }
  }
  assert(!column->contains(T::na()));
  assert(column->find_one(T::na()).is_na());

  // Test all the values with index if available.
  try {
    column->create_index("Index", GRNXX_TREE_INDEX);
    for (size_t i = 0; i < NUM_ROWS; ++i) {
      if (!values[i].is_na()) {
        assert(column->contains(values[i]));
        grnxx::Int row_id = column->find_one(values[i]);
        assert(!row_id.is_na());
        assert(values[i].match(values[row_id.raw()]));
      }
    }
    assert(!column->contains(T::na()));
    assert(column->find_one(T::na()).is_na());
    column->remove_index("Index");
  } catch (...) {
  }

  // Insert a trailing N/A value.
  table->insert_row_at(grnxx::Int(NUM_ROWS));
  assert(column->contains(T::na()));
  assert(column->find_one(T::na()).match(grnxx::Int(NUM_ROWS)));
  try {
    column->create_index("Index", GRNXX_TREE_INDEX);
    assert(column->contains(T::na()));
    assert(column->find_one(T::na()).match(grnxx::Int(NUM_ROWS)));
    column->remove_index("Index");
  } catch (...) {
  }

  // Remove non-N/A values.
  for (size_t i = 0; i < NUM_ROWS; ++i) {
    if (!values[i].is_na()) {
      table->remove_row(grnxx::Int(i));
    }
  }

  // Test all the values.
  for (size_t i = 0; i < NUM_ROWS; ++i) {
    if (!values[i].is_na()) {
      assert(!column->contains(values[i]));
      assert(column->find_one(values[i]).is_na());
    }
  }
  assert(column->contains(T::na()));
  assert(column->find_one(T::na()).match(grnxx::Int(NUM_ROWS)));

  // Test all the values with index if available.
  try {
    column->create_index("Index", GRNXX_TREE_INDEX);
    for (size_t i = 0; i < NUM_ROWS; ++i) {
      if (!values[i].is_na()) {
        assert(!column->contains(values[i]));
        assert(column->find_one(values[i]).is_na());
      }
    }
    assert(column->contains(T::na()));
    assert(column->find_one(T::na()).match(grnxx::Int(NUM_ROWS)));
    column->remove_index("Index");
  } catch (...) {
  }
}
static void find_one_index_large_test( void )  {
    find_one( DB ".index.large" );
}
static void find_one_index_medium_test( void ) {
    find_one( DB ".index.medium" );
}
static void find_one_index_small_test( void )  {
    find_one( DB ".index.small" );
}
static void find_one_noindex_large_test( void )  {
    find_one( DB ".single.large" );
}
static void find_one_noindex_medium_test( void ) {
    find_one( DB ".single.medium" );
}
static void find_one_noindex_small_test( void )  {
    find_one( DB ".single.small" );
}