X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Fcore%2Fdata.c;fp=src%2Fcore%2Fdata.c;h=a6cd092265a274a3f1c5b316d3f9ddffe30a0f81;hp=8754f8868a11471fe1e359cee75ac0d52b87721d;hb=69055716798ecc8fb1db3ccbbb1b059f3faf9a05;hpb=69b354e9c3e5358666dad1a97bc17b52f8869ed3 diff --git a/src/core/data.c b/src/core/data.c index 8754f88..a6cd092 100644 --- a/src/core/data.c +++ b/src/core/data.c @@ -650,6 +650,43 @@ sdb_data_inarray(const sdb_data_t *value, const sdb_data_t *array) return 0; } /* sdb_data_inarray */ +int +sdb_data_array_get(const sdb_data_t *array, size_t i, sdb_data_t *value) +{ + sdb_data_t tmp = SDB_DATA_INIT; + int type; + + if ((! array) || (! (array->type & SDB_TYPE_ARRAY))) + return -1; + if (i >= array->data.array.length) + return -1; + + type = array->type & 0xff; + if (type == SDB_TYPE_INTEGER) { + int64_t *v = array->data.array.values; + tmp.data.integer = v[i]; + } + else if (type == SDB_TYPE_DECIMAL) { + double *v = array->data.array.values; + tmp.data.decimal = v[i]; + } + else if (type == SDB_TYPE_STRING) { + char **v = array->data.array.values; + tmp.data.string = v[i]; + } + else { + /* TODO */ + errno = ENOTSUP; + return -1; + } + + if (value) { + *value = tmp; + value->type = type; + } + return 0; +} /* sdb_data_array_get */ + int sdb_data_parse_op(const char *op) {