Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: uamqp/uamqp_generator/amqp_definitions_c.tt
- Revision:
- 0:f7f1f0d76dd6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uamqp/uamqp_generator/amqp_definitions_c.tt Thu Aug 23 06:52:14 2018 +0000 @@ -0,0 +1,672 @@ +<#@ template language="C#" #> +<#@ assembly name="System.Core" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="System.Text" #> +<#@ import namespace="System.Collections.Generic" #> +<#@ import namespace="amqplib_generator" #> + +<# amqp amqp = Program.LoadAMQPTypes(); #> + +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +// This file is generated. DO NOT EDIT it manually. +// The generator that produces it is located at /uamqp_generator/uamqp_generator.sln + +#include <stdlib.h> +#include "azure_c_shared_utility/optimize_size.h" +#include "azure_c_shared_utility/gballoc.h" +#include "azure_uamqp_c/amqpvalue.h" +#include "azure_uamqp_c/amqp_definitions.h" +#include <stdlib.h> +#include <stdbool.h> + +<# foreach (section section in amqp.Items.Where(item => item is section)) #> +<# { #> +<# List<type> types = new List<type>(); #> +<# types.AddRange(section.Items.Where(item => item is type).Cast<type>()); #> +<# foreach (type type in types) #> +<# { #> +<# string type_name = type.name.ToLower().Replace('-', '_'); #> +<# if (type.@class == typeClass.composite) #> +<# { #> +<# var descriptor = type.Items.Where(item => item is descriptor).First() as descriptor; #> +/* <#= type.name #> */ + +typedef struct <#= type_name.ToUpper() #>_INSTANCE_TAG +{ + AMQP_VALUE composite_value; +} <#= type_name.ToUpper() #>_INSTANCE; + +<# string arg_list = Program.GetMandatoryArgList(type); #> +<# KeyValuePair<field, int>[] mandatory_args = Program.GetMandatoryArgs(type).ToArray(); #> +static <#= type_name.ToUpper() #>_HANDLE <#= type_name #>_create_internal(void) +{ + <#= type_name.ToUpper() #>_INSTANCE* <#= type_name #>_instance = (<#= type_name.ToUpper() #>_INSTANCE*)malloc(sizeof(<#= type_name.ToUpper() #>_INSTANCE)); + if (<#= type_name #>_instance != NULL) + { + <#= type_name #>_instance->composite_value = NULL; + } + + return <#= type_name #>_instance; +} + +<#= type_name.ToUpper() #>_HANDLE <#= type_name #>_create(<#= arg_list #>) +{ + <#= type_name.ToUpper() #>_INSTANCE* <#= type_name #>_instance = (<#= type_name.ToUpper() #>_INSTANCE*)malloc(sizeof(<#= type_name.ToUpper() #>_INSTANCE)); + if (<#= type_name #>_instance != NULL) + { + <#= type_name #>_instance->composite_value = amqpvalue_create_composite_with_ulong_descriptor(<#= Program.GetDescriptorCode(Program.GetDescriptor(type)) #>); + if (<#= type_name #>_instance->composite_value == NULL) + { + free(<#= type_name #>_instance); + <#= type_name #>_instance = NULL; + } +<# if (mandatory_args.Count() > 0) #> +<# { #> + else + { +<# for (int i = 0; i < mandatory_args.Count(); i++) #> +<# { #> +<# string mandatory_arg_name = mandatory_args[i].Key.name.ToLower().Replace('-', '_').Replace(':', '_'); #> + AMQP_VALUE <#= mandatory_arg_name #>_amqp_value; +<# } #> + int result = 0; + +<# for (int i = 0; i < mandatory_args.Count(); i++) #> +<# { #> +<# string mandatory_arg_type = Program.GetCType(mandatory_args[i].Key.type.ToLower(), mandatory_args[i].Key.multiple == "true").Replace('-', '_').Replace(':', '_'); #> +<# string mandatory_arg_name = mandatory_args[i].Key.name.ToLower().Replace('-', '_').Replace(':', '_'); #> +<# if (mandatory_args[i].Key.multiple != "true") #> +<# { #> + <#= mandatory_arg_name #>_amqp_value = amqpvalue_create_<#= mandatory_args[i].Key.type.ToLower().Replace('-', '_').Replace(':', '_') #>(<#= mandatory_args[i].Key.name.ToLower().Replace('-', '_').Replace(':', '_') #>_value); +<# } #> +<# else #> +<# { #> + <#= mandatory_arg_name #>_amqp_value = <#= mandatory_args[i].Key.name.ToLower().Replace('-', '_').Replace(':', '_') #>_value; +<# } #> + if ((result == 0) && (amqpvalue_set_composite_item(<#= type_name #>_instance->composite_value, <#= mandatory_args[i].Value #>, <#= mandatory_arg_name #>_amqp_value) != 0)) + { + result = __FAILURE__; + } +<# } #> + +<# for (int i = 0; i < mandatory_args.Count(); i++) #> +<# { #> +<# string mandatory_arg_name = mandatory_args[i].Key.name.ToLower().Replace('-', '_').Replace(':', '_'); #> + amqpvalue_destroy(<#= mandatory_arg_name #>_amqp_value); +<# } #> + } +<# } #> + } + + return <#= type_name #>_instance; +} + +<#= type_name.ToUpper() #>_HANDLE <#= type_name #>_clone(<#= type_name.ToUpper() #>_HANDLE value) +{ + <#= type_name.ToUpper() #>_INSTANCE* <#= type_name #>_instance = (<#= type_name.ToUpper() #>_INSTANCE*)malloc(sizeof(<#= type_name.ToUpper() #>_INSTANCE)); + if (<#= type_name #>_instance != NULL) + { + <#= type_name #>_instance->composite_value = amqpvalue_clone(((<#= type_name.ToUpper() #>_INSTANCE*)value)->composite_value); + if (<#= type_name #>_instance->composite_value == NULL) + { + free(<#= type_name #>_instance); + <#= type_name #>_instance = NULL; + } + } + + return <#= type_name #>_instance; +} + +void <#= type_name #>_destroy(<#= type_name.ToUpper() #>_HANDLE <#= type_name #>) +{ + if (<#= type_name #> != NULL) + { + <#= type_name.ToUpper() #>_INSTANCE* <#= type_name #>_instance = (<#= type_name.ToUpper() #>_INSTANCE*)<#= type_name #>; + amqpvalue_destroy(<#= type_name #>_instance->composite_value); + free(<#= type_name #>_instance); + } +} + +AMQP_VALUE amqpvalue_create_<#= type_name #>(<#= type_name.ToUpper() #>_HANDLE <#= type_name #>) +{ + AMQP_VALUE result; + + if (<#= type_name #> == NULL) + { + result = NULL; + } + else + { + <#= type_name.ToUpper() #>_INSTANCE* <#= type_name #>_instance = (<#= type_name.ToUpper() #>_INSTANCE*)<#= type_name #>; + result = amqpvalue_clone(<#= type_name #>_instance->composite_value); + } + + return result; +} + +bool is_<#= type_name #>_type_by_descriptor(AMQP_VALUE descriptor) +{ + bool result; + + uint64_t descriptor_ulong; + if ((amqpvalue_get_ulong(descriptor, &descriptor_ulong) == 0) && + (descriptor_ulong == <#= Program.GetDescriptorCode(descriptor).ToString() #>)) + { + result = true; + } + else + { + result = false; + } + + return result; +} + + +int amqpvalue_get_<#= type_name #>(AMQP_VALUE value, <#= type_name.ToUpper() #>_HANDLE* <#= type_name.ToLower() #>_handle) +{ + int result; + <#= type_name.ToUpper() #>_INSTANCE* <#= type_name.ToLower() #>_instance = (<#= type_name.ToUpper() #>_INSTANCE*)<#= type_name #>_create_internal(); + *<#= type_name.ToLower() #>_handle = <#= type_name.ToLower() #>_instance; + if (*<#= type_name.ToLower() #>_handle == NULL) + { + result = __FAILURE__; + } + else + { + AMQP_VALUE list_value = amqpvalue_get_inplace_described_value(value); + if (list_value == NULL) + { + <#= type_name #>_destroy(*<#= type_name.ToLower() #>_handle); + result = __FAILURE__; + } + else + { + uint32_t list_item_count; + if (amqpvalue_get_list_item_count(list_value, &list_item_count) != 0) + { + result = __FAILURE__; + } + else + { + do + { +<# int k = 0; #> +<# bool first_one = true; #> +<# foreach (field field in type.Items.Where(item => item is field)) #> +<# { #> +<# string field_name = field.name.ToLower().Replace('-', '_'); #> +<# string c_type = Program.GetCType(field.type, false).Replace('-', '_').Replace(':', '_'); #> +<# type field_type = Program.GetTypeByName(field.type); #> +<# if ((field_type != null) && (field_type.@class == typeClass.composite)) c_type = field_type.name.ToUpper().Replace('-', '_').Replace(':', '_') + "_HANDLE"; #> +<# if (first_one) #> +<# { #> +<# first_one = false; #> + AMQP_VALUE item_value; +<# } #> + /* <#= field.name #> */ + if (list_item_count > <#= k #>) + { + item_value = amqpvalue_get_list_item(list_value, <#= k #>); + if (item_value == NULL) + { +<# if (field.mandatory == "true") #> +<# { #> + { + <#= type_name #>_destroy(*<#= type_name.ToLower() #>_handle); + result = __FAILURE__; + break; + } +<# } #> +<# else #> +<# { #> + /* do nothing */ +<# } #> + } + else + { +<# if (field.type != "*") #> +<# { #> + if (amqpvalue_get_type(item_value) == AMQP_TYPE_NULL) + { +<# if (field.mandatory == "true") #> +<# { #> + amqpvalue_destroy(item_value); + <#= type_name #>_destroy(*<#= type_name.ToLower() #>_handle); + result = __FAILURE__; + break; +<# } #> +<# else #> +<# { #> + /* no error, field is not mandatory */ +<# } #> + } + else + { +<# if (field.multiple != "true") #> +<# { #> + <#= c_type #> <#= field_name #>; + if (amqpvalue_get_<#= field.type.ToLower().Replace('-', '_').Replace(':', '_') #>(item_value, &<#= field_name #>) != 0) +<# } #> +<# else #> +<# { #> + <#= c_type #> <#= field_name #> = NULL; + AMQP_VALUE <#= field_name #>_array; + if (((amqpvalue_get_type(item_value) != AMQP_TYPE_ARRAY) || (amqpvalue_get_array(item_value, &<#= field_name #>_array) != 0)) && + (amqpvalue_get_<#= field.type.ToLower().Replace('-', '_').Replace(':', '_') #>(item_value, &<#= field_name #>) != 0)) +<# } #> + { + amqpvalue_destroy(item_value); + <#= type_name #>_destroy(*<#= type_name.ToLower() #>_handle); + result = __FAILURE__; + break; + } +<# if (c_type == "ERROR_HANDLE") #> +<# { #> + else + { + error_destroy(<#= field_name.ToLower() #>); + } +<# } #> + } + +<# } #> +<# else #> +<# { #> +<# } #> + amqpvalue_destroy(item_value); + } + } +<# if (field.mandatory == "true") #> +<# { #> + else + { + result = __FAILURE__; + } +<# } #> +<# k++; #> +<# } #> + + <#= type_name.ToLower() #>_instance->composite_value = amqpvalue_clone(value); + + result = 0; + } while((void)0,0); + } + } + } + + return result; +} + +<# int j = 0; #> +<# foreach (field field in type.Items.Where(item => item is field)) #> +<# { #> +<# string field_name = field.name.ToLower().Replace('-', '_'); #> +<# string c_type = Program.GetCType(field.type, field.multiple == "true").Replace('-', '_').Replace(':', '_'); #> +<# string single_value_c_type = Program.GetCType(field.type, false).Replace('-', '_').Replace(':', '_'); #> +<# type field_type = Program.GetTypeByName(field.type); #> +<# if ((field_type != null) && (field_type.@class == typeClass.composite)) c_type = field_type.name.ToUpper().Replace('-', '_').Replace(':', '_') + "_HANDLE"; #> +int <#= type_name #>_get_<#= field_name #>(<#= type_name.ToUpper() #>_HANDLE <#= type_name #>, <#= c_type #>* <#= field_name #>_value) +{ + int result; + + if (<#= type_name #> == NULL) + { + result = __FAILURE__; + } + else + { + uint32_t item_count; + <#= type_name.ToUpper() #>_INSTANCE* <#= type_name #>_instance = (<#= type_name.ToUpper() #>_INSTANCE*)<#= type_name #>; + if (amqpvalue_get_composite_item_count(<#= type_name #>_instance->composite_value, &item_count) != 0) + { + result = __FAILURE__; + } + else + { + if (item_count <= <#= j #>) + { +<# if (field.@default != null) #> +<# { #> +<# if ((field_type != null) && (field_type.@class == typeClass.restricted) && (field_type.Items != null)) #> +<# { #> + *<#= field_name #>_value = <#= field_type.@name.Replace('-', '_').Replace(':', '_') #>_<#= field.@default.Replace('-', '_').Replace(':', '_') #>; +<# } #> +<# else #> +<# { #> + *<#= field_name #>_value = <#= field.@default #>; +<# } #> + result = 0; +<# } #> +<# else #> +<# { #> + result = __FAILURE__; +<# } #> + } + else + { + AMQP_VALUE item_value = amqpvalue_get_composite_item_in_place(<#= type_name #>_instance->composite_value, <#= j #>); + if ((item_value == NULL) || + (amqpvalue_get_type(item_value) == AMQP_TYPE_NULL)) + { +<# if (field.@default != null) #> +<# { #> +<# if ((field_type != null) && (field_type.@class == typeClass.restricted) && (field_type.Items != null)) #> +<# { #> + *<#= field_name #>_value = <#= field_type.@name.Replace('-', '_').Replace(':', '_') #>_<#= field.@default.Replace('-', '_').Replace(':', '_') #>; +<# } #> +<# else #> +<# { #> + *<#= field_name #>_value = <#= field.@default #>; +<# } #> + result = 0; +<# } #> +<# else #> +<# { #> + result = __FAILURE__; +<# } #> + } + else + { +<# if (field.multiple == "true") #> +<# { #> + <#= single_value_c_type #> <#= field_name #>_single_value; +<# } #> +<# if (field.type.Replace('-', '_').Replace(':', '_') == "*") #> +<# { #> + *<#= field_name #>_value = item_value; + result = 0; +<# } #> +<# else #> +<# { #> +<# if (field.multiple != "true") #> +<# { #> + int get_single_value_result = amqpvalue_get_<#= field.type.Replace('-', '_').Replace(':', '_') #>(item_value, <#= field_name #>_value); + if (get_single_value_result != 0) +<# } #> +<# else #> +<# { #> + int get_single_value_result; + if (amqpvalue_get_type(item_value) != AMQP_TYPE_ARRAY) + { + get_single_value_result = amqpvalue_get_<#= field.type.ToLower().Replace('-', '_').Replace(':', '_') #>(item_value, &<#= field_name #>_single_value); + } + else + { + (void)memset((void*)&<#= field_name #>_single_value, 0, sizeof(<#= field_name #>_single_value)); + get_single_value_result = 1; + } + + if (((amqpvalue_get_type(item_value) != AMQP_TYPE_ARRAY) || (amqpvalue_get_array(item_value, <#= field_name #>_value) != 0)) && + (get_single_value_result != 0)) +<# } #> + { +<# if (field.@default != null) #> +<# { #> + if (amqpvalue_get_type(item_value) != AMQP_TYPE_NULL) + { + result = __FAILURE__; + } + else + { +<# if ((field_type != null) && (field_type.@class == typeClass.restricted) && (field_type.Items != null)) #> +<# { #> + *<#= field_name #>_value = <#= field_type.@name.Replace('-', '_').Replace(':', '_') #>_<#= field.@default.Replace('-', '_').Replace(':', '_') #>; +<# } #> +<# else #> +<# { #> + *<#= field_name #>_value = <#= field.@default #>; +<# } #> + result = 0; + } +<# } #> +<# else #> +<# { #> + result = __FAILURE__; +<# } #> + } + else + { +<# if (field.multiple == "true") #> +<# { #> + if (amqpvalue_get_type(item_value) != AMQP_TYPE_ARRAY) + { + *<#= field_name #>_value = amqpvalue_create_array(); + if (*<#= field_name #>_value == NULL) + { + result = __FAILURE__; + } + else + { + AMQP_VALUE single_amqp_value = amqpvalue_create_<#= field.type.ToLower().Replace('-', '_').Replace(':', '_') #>(<#= field_name #>_single_value); + if (single_amqp_value == NULL) + { + amqpvalue_destroy(*<#= field_name #>_value); + result = __FAILURE__; + } + else + { + if (amqpvalue_add_array_item(*<#= field_name #>_value, single_amqp_value) != 0) + { + amqpvalue_destroy(*<#= field_name #>_value); + amqpvalue_destroy(single_amqp_value); + result = __FAILURE__; + } + else + { + if (amqpvalue_set_composite_item(<#= type_name #>_instance->composite_value, <#= j #>, *<#= field_name #>_value) != 0) + { + amqpvalue_destroy(*<#= field_name #>_value); + result = __FAILURE__; + } + else + { + result = 0; + } + } + + amqpvalue_destroy(single_amqp_value); + } + amqpvalue_destroy(*<#= field_name #>_value); + } + } + else + { + result = 0; + } +<# } #> +<# else #> +<# { #> + result = 0; +<# } #> + } +<# } #> + } + } + } + } + + return result; +} + +int <#= type_name #>_set_<#= field_name #>(<#= type_name.ToUpper() #>_HANDLE <#= type_name #>, <#= c_type #> <#= field_name #>_value) +{ + int result; + + if (<#= type_name #> == NULL) + { + result = __FAILURE__; + } + else + { + <#= type_name.ToUpper() #>_INSTANCE* <#= type_name #>_instance = (<#= type_name.ToUpper() #>_INSTANCE*)<#= type_name #>; +<# if (c_type != "AMQP_VALUE") #> +<# { #> + AMQP_VALUE <#= field_name #>_amqp_value = amqpvalue_create_<#= field.type.ToLower().Replace('-', '_').Replace(':', '_') #>(<#= field_name #>_value); +<# } #> +<# else #> +<# { #> + AMQP_VALUE <#= field_name #>_amqp_value; + if (<#= field_name #>_value == NULL) + { + <#= field_name #>_amqp_value = NULL; + } + else + { + <#= field_name #>_amqp_value = amqpvalue_clone(<#= field_name #>_value); + } +<# } #> + if (<#= field_name #>_amqp_value == NULL) + { + result = __FAILURE__; + } + else + { + if (amqpvalue_set_composite_item(<#= type_name #>_instance->composite_value, <#= j #>, <#= field_name #>_amqp_value) != 0) + { + result = __FAILURE__; + } + else + { + result = 0; + } + + amqpvalue_destroy(<#= field_name #>_amqp_value); + } + } + + return result; +} + +<# j++; #> +<# } #> + +<# } #> +<# else if (type.@class == typeClass.restricted) #> +<# { #> +<# string c_type = Program.GetCType(type.source, false).Replace('-', '_').Replace(':', '_'); #> +<# bool hasDescriptor = (type.Items != null) && (type.Items.Where(item => item is descriptor).Count() > 0); #> +/* <#= type.name #> */ + +<# if (c_type != "AMQP_VALUE") #> +<# { #> +<# if (!hasDescriptor) #> +<# { #> +AMQP_VALUE amqpvalue_create_<#= type_name.ToLower() #>(<#= type_name.ToLower() #> value) +{ + return amqpvalue_create_<#= type.source.ToLower().Replace('-', '_').Replace(':', '_') #>(value); +} +<# } #> +<# else #> +<# { #> +AMQP_VALUE amqpvalue_create_<#= type_name.ToLower() #>(<#= type_name.ToLower() #> value) +{ + AMQP_VALUE result; + AMQP_VALUE described_value = amqpvalue_create_<#= type.source.ToLower().Replace('-', '_').Replace(':', '_') #>(value); + if (described_value == NULL) + { + result = NULL; + } + else + { + AMQP_VALUE descriptor = amqpvalue_create_ulong(<#= Program.GetDescriptorCode(Program.GetDescriptor(type)) #>); + if (descriptor == NULL) + { + result = NULL; + } + else + { + result = amqpvalue_create_described(amqpvalue_clone(descriptor), amqpvalue_clone(described_value)); + + amqpvalue_destroy(descriptor); + } + + amqpvalue_destroy(described_value); + } + + return result; +} + +bool is_<#= type_name.ToLower() #>_type_by_descriptor(AMQP_VALUE descriptor) +{ + bool result; + + uint64_t descriptor_ulong; + if ((amqpvalue_get_ulong(descriptor, &descriptor_ulong) == 0) && + (descriptor_ulong == <#= Program.GetDescriptorCode(Program.GetDescriptor(type)).ToString() #>)) + { + result = true; + } + else + { + result = false; + } + + return result; +} +<# } #> +<# } #> +<# else #> +<# { #> +<# if (!hasDescriptor) #> +<# { #> +AMQP_VALUE amqpvalue_create_<#= type_name.ToLower() #>(AMQP_VALUE value) +{ + return amqpvalue_clone(value); +} +<# } #> +<# else #> +<# { #> +AMQP_VALUE amqpvalue_create_<#= type_name.ToLower() #>(AMQP_VALUE value) +{ + AMQP_VALUE result; + AMQP_VALUE described_value = amqpvalue_clone(value); + if (described_value == NULL) + { + result = NULL; + } + else + { + AMQP_VALUE descriptor = amqpvalue_create_ulong(<#= Program.GetDescriptorCode(Program.GetDescriptor(type)) #>); + if (descriptor == NULL) + { + result = NULL; + } + else + { + result = amqpvalue_create_described(amqpvalue_clone(descriptor), amqpvalue_clone(described_value)); + + amqpvalue_destroy(descriptor); + } + + amqpvalue_destroy(described_value); + } + + return result; +} + +bool is_<#= type_name.ToLower() #>_type_by_descriptor(AMQP_VALUE descriptor) +{ + bool result; + + uint64_t descriptor_ulong; + if ((amqpvalue_get_ulong(descriptor, &descriptor_ulong) == 0) && + (descriptor_ulong == <#= Program.GetDescriptorCode(Program.GetDescriptor(type)).ToString() #>)) + { + result = true; + } + else + { + result = false; + } + + return result; +} +<# } #> +<# } #> + +<# } #> +<# } #> +<# } #>