static int64_t OCConvertArray(CborEncoder *parent, const OCRepPayloadValueArray *valArray) { int64_t err = CborNoError; CborEncoder array; err |= cbor_encoder_create_array(parent, &array, valArray->dimensions[0]); VERIFY_CBOR_SUCCESS(TAG, err, "Failed creating rep array"); for (size_t i = 0; i < valArray->dimensions[0]; ++i) { if (0 != valArray->dimensions[1]) { CborEncoder array2; err |= cbor_encoder_create_array(&array, &array2, valArray->dimensions[1]); VERIFY_CBOR_SUCCESS(TAG, err, "Failed creating rep array2"); for (size_t j = 0; j < valArray->dimensions[1]; ++j) { if (0 != valArray->dimensions[2]) { CborEncoder array3; err |= cbor_encoder_create_array(&array2, &array3, valArray->dimensions[2]); VERIFY_CBOR_SUCCESS(TAG, err, "Failed creating rep array3"); for(size_t k = 0; k < valArray->dimensions[2]; ++k) { err |= OCConvertArrayItem(&array3, valArray, j * valArray->dimensions[2] + i * valArray->dimensions[2] * valArray->dimensions[1] + k); VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding rep array3 value"); } err |= cbor_encoder_close_container(&array2, &array3); VERIFY_CBOR_SUCCESS(TAG, err, "Failed closing rep array3"); } else { err |= OCConvertArrayItem(&array2, valArray, i * valArray->dimensions[1] + j); VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding rep array2 value"); } } err |= cbor_encoder_close_container(&array, &array2); VERIFY_CBOR_SUCCESS(TAG, err, "Failed closing rep array2"); } else { err |= OCConvertArrayItem(&array, valArray, i); VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding rep array value"); } } err |= cbor_encoder_close_container(parent, &array); VERIFY_CBOR_SUCCESS(TAG, err, "Failed closing rep array"); exit: return err; }
static int64_t OCConvertArray(CborEncoder* parent, const OCRepPayloadValueArray* valArray) { CborEncoder array; int64_t err = 0; err = err | cbor_encoder_create_array(parent, &array, valArray->dimensions[0]); for (size_t i = 0; i < valArray->dimensions[0];++i) { if (valArray->dimensions[1] != 0) { CborEncoder array2; err = err | cbor_encoder_create_array(&array, &array2, valArray->dimensions[1]); for (size_t j = 0; j < valArray->dimensions[1]; ++j) { if (valArray->dimensions[2] != 0) { CborEncoder array3; err = err | cbor_encoder_create_array(&array2, &array3, valArray->dimensions[2]); for(size_t k = 0; k < valArray->dimensions[2]; ++k) { OCConvertArrayItem(&array3, valArray, j * valArray->dimensions[2] + i * valArray->dimensions[2] * valArray->dimensions[1] + k); } err = err | cbor_encoder_close_container(&array2, &array3); } else { OCConvertArrayItem(&array2, valArray, i * valArray->dimensions[1] + j); } } err = err | cbor_encoder_close_container(&array, &array2); } else { OCConvertArrayItem(&array, valArray, i); } } err = err | cbor_encoder_close_container(parent, &array); return err; }