Esempio n. 1
0
vector_t * vector_deep_copy(vector_t * vector, libcontain_copy_func_t vector_valcopy_func)
{
	size_t i;
	size_t size;
	vector_t * retval;
	void * val;

	rw_spinlock_read_lock(vector->lock);
	do
	{
		size = vector->size;
	} while (!size);
	retval = vector_new(size);
	if (!retval)
		goto abort_vector_deep_copy1;
	for (i = 0; i < size; i++)
	{
		val = vector_get(vector, i);
		if (val != NULL)
			if (vector_put(retval, i, vector_valcopy_func(vector->nodes[i].val)) != 0)
				goto abort_vector_deep_copy2;
	}
	rw_spinlock_read_unlock(vector->lock);

	return retval;

abort_vector_deep_copy2:
	vector_free(retval);
abort_vector_deep_copy1:
	rw_spinlock_read_unlock(vector->lock);
	return NULL;
}
Esempio n. 2
0
static void vector_2(void) {
    vector_t v;

    CU_ASSERT(vector_init(&v, "my_vector.bin", 1) == 0);
    CU_ASSERT(vector_size(&v) == 0);
    CU_ASSERT(vector_pages(&v) == 0);
    CU_ASSERT(vector_capacity(&v) == 0);
    CU_ASSERT(vector_elem_size(&v) == 1);

    CU_ASSERT(vector_size(&v, COUNT) == COUNT);
    CU_ASSERT(COUNT <= vector_capacity(&v));
    CU_ASSERT(COUNT <= vector_size(&v));
    CU_ASSERT(3 <= vector_pages(&v));

    for (int i=0; i<COUNT; i++) {
        unsigned char c = (unsigned char)i;
        crc2 = clib_crc32(c, crc2);
        CU_ASSERT(vector_put(&v, i, &c) == 0);
    }
    CU_ASSERT_FATAL(crc2 != 0);

    FILE * f = fopen(v.hdr.name, "w");
    CU_ASSERT_FATAL(f != NULL);
    CU_ASSERT(COUNT < vector_save(&v, f));
    fclose(f), f = NULL;

    CU_ASSERT(vector_delete(&v) == 0);
}
Esempio n. 3
0
static struct exp *fn_vector_set(struct exp *args) {
  err_ensure(exp_list_length(args) == 3,
             "vector-set! requires exactly three arguments, got", args);
  struct exp *vector = CAR(args);
  struct exp *k = CADR(args);
  struct exp *obj = CADDR(args);
  err_ensure(IS(vector, VECTOR),
             "vector-set! requires a vector argument, got", vector);
  err_ensure(IS(k, FIXNUM),
             "vector-set! requires a numeric index, got", k);
  size_t i = k->value.fixnum;
  err_ensure(i >= 0 && i < vector_length(vector->value.vector),
             "vector-set! requires a valid index, got", k);
  vector_put(vector->value.vector, i, obj);
  return OK;
}
Esempio n. 4
0
int64_t SparseMatrix<VALUE_T>::timed_vector_put(std::vector<std::string> row_key,
                          std::vector<std::string> column_key,
                          int64_t time_stamp,
                          std::vector<VALUE_T> value) {
    CHECK_EQ(row_key.size(), column_key.size());
    CHECK_EQ(row_key.size(), value.size());
    write_lock _lock(KVStorage::_timed_rwmutex);

    for (uint64_t i = 0; i < row_key.size(); ++i) {
       _timed_storage[time_stamp][row_key[i]][column_key[i]] = value[i];
    }

    if (_timed_storage.size() >= 3) {
       _timed_storage.erase(_timed_storage.begin());
    }

    vector_put(row_key, column_key, value);
    return 1;
}
Esempio n. 5
0
vector_t * vector_copy(vector_t * vector)
{
	size_t size = vector->size;
	vector_t * retval = vector_new(size);
	if (!retval)
		return NULL;
	size_t i;

	rw_spinlock_read_lock(vector->lock);
	for (i = 0; i < size; i++)
		if (vector_put(retval, i, vector_get(vector, i)) != 0)
			goto abort_vector_copy;
	rw_spinlock_read_unlock(vector->lock);

	return retval;
	
abort_vector_copy:
	vector_free(retval);
	return NULL;
}