コード例 #1
0
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;
}
コード例 #2
0
ファイル: ocpayloadconvert.c プロジェクト: hanglei/iotivity
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;
}