S Morita / mbed-mros2

Dependents:   mbed-os-example-mros2 example-mbed-mros2-sub-pose example-mbed-mros2-pub-twist example-mbed-mros2-mturtle-teleop

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers sequence.c Source File

sequence.c

00001 // Copyright 2017 Proyectos y Sistemas de Mantenimiento SL (eProsima).
00002 //
00003 // Licensed under the Apache License, Version 2.0 (the "License");
00004 // you may not use this file except in compliance with the License.
00005 // You may obtain a copy of the License at
00006 //
00007 //     http://www.apache.org/licenses/LICENSE-2.0
00008 //
00009 // Unless required by applicable law or agreed to in writing, software
00010 // distributed under the License is distributed on an "AS IS" BASIS,
00011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00012 // See the License for the specific language governing permissions and
00013 // limitations under the License.
00014 
00015 #include <ucdr/types/basic.h>
00016 #include <ucdr/types/array.h>
00017 #include <ucdr/types/sequence.h>
00018 
00019 #include "array_internals.h"
00020 #include "sequence_internals.h"
00021 
00022 // -------------------------------------------------------------------
00023 //                INTERNAL UTIL IMPLEMENTATION
00024 // -------------------------------------------------------------------
00025 static inline void ucdr_deserialize_sequence_header(ucdrBuffer* mb, ucdrEndianness endianness, uint32_t capacity, uint32_t* size)
00026 {
00027     ucdr_deserialize_endian_uint32_t(mb, endianness, size);
00028     if(*size > capacity)
00029     {
00030         mb->error = true;
00031     }
00032 }
00033 
00034 // -------------------------------------------------------------------
00035 //                INTERNAL SERIALIZATION IMPLEMENTATION
00036 // -------------------------------------------------------------------
00037 bool ucdr_serialize_sequence_byte_1(ucdrBuffer* mb, ucdrEndianness endianness, const uint8_t* array, const uint32_t size)
00038 {
00039     ucdr_serialize_endian_uint32_t(mb, endianness, size);
00040     return ucdr_serialize_array_byte_1(mb, array, size);
00041 }
00042 
00043 bool ucdr_serialize_sequence_byte_2(ucdrBuffer* mb, ucdrEndianness endianness, const uint16_t* array, const uint32_t size)
00044 {
00045     ucdr_serialize_endian_uint32_t(mb, endianness, size);
00046     return ucdr_serialize_array_byte_2(mb, endianness, array, size);
00047 }
00048 
00049 bool ucdr_serialize_sequence_byte_4(ucdrBuffer* mb, ucdrEndianness endianness, const uint32_t* array, const uint32_t size)
00050 {
00051     ucdr_serialize_endian_uint32_t(mb, endianness, size);
00052     return ucdr_serialize_array_byte_4(mb, endianness, array, size);
00053 }
00054 
00055 bool ucdr_serialize_sequence_byte_8(ucdrBuffer* mb, ucdrEndianness endianness, const uint64_t* array, const uint32_t size)
00056 {
00057     ucdr_serialize_endian_uint32_t(mb, endianness, size);
00058     return ucdr_serialize_array_byte_8(mb, endianness, array, size);
00059 }
00060 
00061 bool ucdr_deserialize_sequence_byte_1(ucdrBuffer* mb, ucdrEndianness endianness, uint8_t* array, const uint32_t array_capacity, uint32_t* size)
00062 {
00063     ucdr_deserialize_sequence_header(mb, endianness, array_capacity, size);
00064     return ucdr_deserialize_array_byte_1(mb, array, *size);
00065 }
00066 
00067 bool ucdr_deserialize_sequence_byte_2(ucdrBuffer* mb, ucdrEndianness endianness, uint16_t* array, const uint32_t array_capacity, uint32_t* size)
00068 {
00069     ucdr_deserialize_sequence_header(mb, endianness, array_capacity, size);
00070     return ucdr_deserialize_array_byte_2(mb, endianness, array, *size);
00071 }
00072 
00073 bool ucdr_deserialize_sequence_byte_4(ucdrBuffer* mb, ucdrEndianness endianness, uint32_t* array, const uint32_t array_capacity, uint32_t* size)
00074 {
00075     ucdr_deserialize_sequence_header(mb, endianness, array_capacity, size);
00076     return ucdr_deserialize_array_byte_4(mb, endianness, array, *size);
00077 }
00078 
00079 bool ucdr_deserialize_sequence_byte_8(ucdrBuffer* mb, ucdrEndianness endianness, uint64_t* array, const uint32_t array_capacity, uint32_t* size)
00080 {
00081     ucdr_deserialize_sequence_header(mb, endianness, array_capacity, size);
00082     return ucdr_deserialize_array_byte_8(mb, endianness, array, *size);
00083 }
00084 
00085 // -------------------------------------------------------------------
00086 //              PUBLIC SERIALIZATION IMPLEMENTATIONS
00087 // -------------------------------------------------------------------
00088 
00089 bool ucdr_serialize_sequence_char(ucdrBuffer* mb, const char* array, const uint32_t size)
00090 {
00091     return ucdr_serialize_sequence_byte_1(mb, mb->endianness, (uint8_t*)array, size);
00092 }
00093 
00094 bool ucdr_serialize_sequence_bool(ucdrBuffer* mb, const bool* array, const uint32_t size)
00095 {
00096     return ucdr_serialize_sequence_byte_1(mb, mb->endianness, (uint8_t*)array, size);
00097 }
00098 
00099 bool ucdr_serialize_sequence_uint8_t(ucdrBuffer* mb, const uint8_t* array, const uint32_t size)
00100 {
00101     return ucdr_serialize_sequence_byte_1(mb, mb->endianness, (uint8_t*)array, size);
00102 }
00103 
00104 bool ucdr_serialize_sequence_uint16_t(ucdrBuffer* mb, const uint16_t* array, const uint32_t size)
00105 {
00106     return ucdr_serialize_sequence_byte_2(mb, mb->endianness, (uint16_t*)array, size);
00107 }
00108 
00109 bool ucdr_serialize_sequence_uint32_t(ucdrBuffer* mb, const uint32_t* array, const uint32_t size)
00110 {
00111     return ucdr_serialize_sequence_byte_4(mb, mb->endianness, (uint32_t*)array, size);
00112 }
00113 
00114 bool ucdr_serialize_sequence_uint64_t(ucdrBuffer* mb, const uint64_t* array, const uint32_t size)
00115 {
00116     return ucdr_serialize_sequence_byte_8(mb, mb->endianness, (uint64_t*)array, size);
00117 }
00118 
00119 bool ucdr_serialize_sequence_int8_t(ucdrBuffer* mb, const int8_t* array, const uint32_t size)
00120 {
00121     return ucdr_serialize_sequence_byte_1(mb, mb->endianness, (uint8_t*)array, size);
00122 }
00123 
00124 bool ucdr_serialize_sequence_int16_t(ucdrBuffer* mb, const int16_t* array, const uint32_t size)
00125 {
00126     return ucdr_serialize_sequence_byte_2(mb, mb->endianness, (uint16_t*)array, size);
00127 }
00128 
00129 bool ucdr_serialize_sequence_int32_t(ucdrBuffer* mb, const int32_t* array, const uint32_t size)
00130 {
00131     return ucdr_serialize_sequence_byte_4(mb, mb->endianness, (uint32_t*)array, size);
00132 }
00133 
00134 bool ucdr_serialize_sequence_int64_t(ucdrBuffer* mb, const int64_t* array, const uint32_t size)
00135 {
00136     return ucdr_serialize_sequence_byte_8(mb, mb->endianness, (uint64_t*)array, size);
00137 }
00138 
00139 bool ucdr_serialize_sequence_float(ucdrBuffer* mb, const float* array, const uint32_t size)
00140 {
00141     return ucdr_serialize_sequence_byte_4(mb, mb->endianness, (uint32_t*)array, size);
00142 }
00143 
00144 bool ucdr_serialize_sequence_double(ucdrBuffer* mb, const double* array, const uint32_t size)
00145 {
00146     return ucdr_serialize_sequence_byte_8(mb, mb->endianness, (uint64_t*)array, size);
00147 }
00148 
00149 bool ucdr_deserialize_sequence_char(ucdrBuffer* mb, char* array, const uint32_t array_capacity, uint32_t* size)
00150 {
00151     return ucdr_deserialize_sequence_byte_1(mb, mb->endianness, (uint8_t*)array, array_capacity, size);
00152 }
00153 
00154 bool ucdr_deserialize_sequence_bool(ucdrBuffer* mb, bool* array, const uint32_t array_capacity, uint32_t* size)
00155 {
00156     return ucdr_deserialize_sequence_byte_1(mb, mb->endianness, (uint8_t*)array, array_capacity, size);
00157 }
00158 
00159 bool ucdr_deserialize_sequence_uint8_t(ucdrBuffer* mb, uint8_t* array, const uint32_t array_capacity, uint32_t* size)
00160 {
00161     return ucdr_deserialize_sequence_byte_1(mb, mb->endianness, (uint8_t*)array, array_capacity, size);
00162 }
00163 
00164 bool ucdr_deserialize_sequence_uint16_t(ucdrBuffer* mb, uint16_t* array, const uint32_t array_capacity, uint32_t* size)
00165 {
00166     return ucdr_deserialize_sequence_byte_2(mb, mb->endianness, (uint16_t*)array, array_capacity, size);
00167 }
00168 
00169 bool ucdr_deserialize_sequence_uint32_t(ucdrBuffer* mb, uint32_t* array, const uint32_t array_capacity, uint32_t* size)
00170 {
00171     return ucdr_deserialize_sequence_byte_4(mb, mb->endianness, (uint32_t*)array, array_capacity, size);
00172 }
00173 
00174 bool ucdr_deserialize_sequence_uint64_t(ucdrBuffer* mb, uint64_t* array, const uint32_t array_capacity, uint32_t* size)
00175 {
00176     return ucdr_deserialize_sequence_byte_8(mb, mb->endianness, (uint64_t*)array, array_capacity, size);
00177 }
00178 
00179 bool ucdr_deserialize_sequence_int8_t(ucdrBuffer* mb, int8_t* array, const uint32_t array_capacity, uint32_t* size)
00180 {
00181     return ucdr_deserialize_sequence_byte_1(mb, mb->endianness, (uint8_t*)array, array_capacity, size);
00182 }
00183 
00184 bool ucdr_deserialize_sequence_int16_t(ucdrBuffer* mb, int16_t* array, const uint32_t array_capacity, uint32_t* size)
00185 {
00186     return ucdr_deserialize_sequence_byte_2(mb, mb->endianness, (uint16_t*)array, array_capacity, size);
00187 }
00188 
00189 bool ucdr_deserialize_sequence_int32_t(ucdrBuffer* mb, int32_t* array, const uint32_t array_capacity, uint32_t* size)
00190 {
00191     return ucdr_deserialize_sequence_byte_4(mb, mb->endianness, (uint32_t*)array, array_capacity, size);
00192 }
00193 
00194 bool ucdr_deserialize_sequence_int64_t(ucdrBuffer* mb, int64_t* array, const uint32_t array_capacity, uint32_t* size)
00195 {
00196     return ucdr_deserialize_sequence_byte_8(mb, mb->endianness, (uint64_t*)array, array_capacity, size);
00197 }
00198 
00199 bool ucdr_deserialize_sequence_float(ucdrBuffer* mb, float* array, const uint32_t array_capacity, uint32_t* size)
00200 {
00201     return ucdr_deserialize_sequence_byte_4(mb, mb->endianness, (uint32_t*)array, array_capacity, size);
00202 }
00203 
00204 bool ucdr_deserialize_sequence_double(ucdrBuffer* mb, double* array, const uint32_t array_capacity, uint32_t* size)
00205 {
00206     return ucdr_deserialize_sequence_byte_8(mb, mb->endianness, (uint64_t*)array, array_capacity, size);
00207 }
00208 
00209 bool ucdr_serialize_endian_sequence_char(ucdrBuffer* mb, const ucdrEndianness endianness, const char* array, const uint32_t size)
00210 {
00211     return ucdr_serialize_sequence_byte_1(mb, endianness, (uint8_t*)array, size);
00212 }
00213 
00214 bool ucdr_serialize_endian_sequence_bool(ucdrBuffer* mb, const ucdrEndianness endianness, const bool* array, const uint32_t size)
00215 {
00216     return ucdr_serialize_sequence_byte_1(mb, endianness, (uint8_t*)array, size);
00217 }
00218 
00219 bool ucdr_serialize_endian_sequence_uint8_t(ucdrBuffer* mb, const ucdrEndianness endianness, const uint8_t* array, const uint32_t size)
00220 {
00221     return ucdr_serialize_sequence_byte_1(mb, endianness, (uint8_t*)array, size);
00222 }
00223 
00224 bool ucdr_serialize_endian_sequence_uint16_t(ucdrBuffer* mb, const ucdrEndianness endianness, const uint16_t* array, const uint32_t size)
00225 {
00226     return ucdr_serialize_sequence_byte_2(mb, endianness, (uint16_t*)array, size);
00227 }
00228 
00229 bool ucdr_serialize_endian_sequence_uint32_t(ucdrBuffer* mb, const ucdrEndianness endianness, const uint32_t* array, const uint32_t size)
00230 {
00231     return ucdr_serialize_sequence_byte_4(mb, endianness, (uint32_t*)array, size);
00232 }
00233 
00234 bool ucdr_serialize_endian_sequence_uint64_t(ucdrBuffer* mb, const ucdrEndianness endianness, const uint64_t* array, const uint32_t size)
00235 {
00236     return ucdr_serialize_sequence_byte_8(mb, endianness, (uint64_t*)array, size);
00237 }
00238 
00239 bool ucdr_serialize_endian_sequence_int8_t(ucdrBuffer* mb, const ucdrEndianness endianness, const int8_t* array, const uint32_t size)
00240 {
00241     return ucdr_serialize_sequence_byte_1(mb, endianness, (uint8_t*)array, size);
00242 }
00243 
00244 bool ucdr_serialize_endian_sequence_int16_t(ucdrBuffer* mb, const ucdrEndianness endianness, const int16_t* array, const uint32_t size)
00245 {
00246     return ucdr_serialize_sequence_byte_2(mb, endianness, (uint16_t*)array, size);
00247 }
00248 
00249 bool ucdr_serialize_endian_sequence_int32_t(ucdrBuffer* mb, const ucdrEndianness endianness, const int32_t* array, const uint32_t size)
00250 {
00251     return ucdr_serialize_sequence_byte_4(mb, endianness, (uint32_t*)array, size);
00252 }
00253 
00254 bool ucdr_serialize_endian_sequence_int64_t(ucdrBuffer* mb, const ucdrEndianness endianness, const int64_t* array, const uint32_t size)
00255 {
00256     return ucdr_serialize_sequence_byte_8(mb, endianness, (uint64_t*)array, size);
00257 }
00258 
00259 bool ucdr_serialize_endian_sequence_float(ucdrBuffer* mb, const ucdrEndianness endianness, const float* array, const uint32_t size)
00260 {
00261     return ucdr_serialize_sequence_byte_4(mb, endianness, (uint32_t*)array, size);
00262 }
00263 
00264 bool ucdr_serialize_endian_sequence_double(ucdrBuffer* mb, const ucdrEndianness endianness, const double* array, const uint32_t size)
00265 {
00266     return ucdr_serialize_sequence_byte_8(mb, endianness, (uint64_t*)array, size);
00267 }
00268 
00269 bool ucdr_deserialize_endian_sequence_char(ucdrBuffer* mb, const ucdrEndianness endianness, char* array, const uint32_t array_capacity, uint32_t* size)
00270 {
00271     return ucdr_deserialize_sequence_byte_1(mb, endianness, (uint8_t*)array, array_capacity, size);
00272 }
00273 
00274 bool ucdr_deserialize_endian_sequence_bool(ucdrBuffer* mb, const ucdrEndianness endianness, bool* array, const uint32_t array_capacity, uint32_t* size)
00275 {
00276     return ucdr_deserialize_sequence_byte_1(mb, endianness, (uint8_t*)array, array_capacity, size);
00277 }
00278 
00279 bool ucdr_deserialize_endian_sequence_uint8_t(ucdrBuffer* mb, const ucdrEndianness endianness, uint8_t* array, const uint32_t array_capacity, uint32_t* size)
00280 {
00281     return ucdr_deserialize_sequence_byte_1(mb, endianness, (uint8_t*)array, array_capacity, size);
00282 }
00283 
00284 bool ucdr_deserialize_endian_sequence_uint16_t(ucdrBuffer* mb, const ucdrEndianness endianness, uint16_t* array, const uint32_t array_capacity, uint32_t* size)
00285 {
00286     return ucdr_deserialize_sequence_byte_2(mb, endianness, (uint16_t*)array, array_capacity, size);
00287 }
00288 
00289 bool ucdr_deserialize_endian_sequence_uint32_t(ucdrBuffer* mb, const ucdrEndianness endianness, uint32_t* array, const uint32_t array_capacity, uint32_t* size)
00290 {
00291     return ucdr_deserialize_sequence_byte_4(mb, endianness, (uint32_t*)array, array_capacity, size);
00292 }
00293 
00294 bool ucdr_deserialize_endian_sequence_uint64_t(ucdrBuffer* mb, const ucdrEndianness endianness, uint64_t* array, const uint32_t array_capacity, uint32_t* size)
00295 {
00296     return ucdr_deserialize_sequence_byte_8(mb, endianness, (uint64_t*)array, array_capacity, size);
00297 }
00298 
00299 bool ucdr_deserialize_endian_sequence_int8_t(ucdrBuffer* mb, const ucdrEndianness endianness, int8_t* array, const uint32_t array_capacity, uint32_t* size)
00300 {
00301     return ucdr_deserialize_sequence_byte_1(mb, endianness, (uint8_t*)array, array_capacity, size);
00302 }
00303 
00304 bool ucdr_deserialize_endian_sequence_int16_t(ucdrBuffer* mb, const ucdrEndianness endianness, int16_t* array, const uint32_t array_capacity, uint32_t* size)
00305 {
00306     return ucdr_deserialize_sequence_byte_2(mb, endianness, (uint16_t*)array, array_capacity, size);
00307 }
00308 
00309 bool ucdr_deserialize_endian_sequence_int32_t(ucdrBuffer* mb, const ucdrEndianness endianness, int32_t* array, const uint32_t array_capacity, uint32_t* size)
00310 {
00311     return ucdr_deserialize_sequence_byte_4(mb, endianness, (uint32_t*)array, array_capacity, size);
00312 }
00313 
00314 bool ucdr_deserialize_endian_sequence_int64_t(ucdrBuffer* mb, const ucdrEndianness endianness, int64_t* array, const uint32_t array_capacity, uint32_t* size)
00315 {
00316     return ucdr_deserialize_sequence_byte_8(mb, endianness, (uint64_t*)array, array_capacity, size);
00317 }
00318 
00319 bool ucdr_deserialize_endian_sequence_float(ucdrBuffer* mb, const ucdrEndianness endianness, float* array, const uint32_t array_capacity, uint32_t* size)
00320 {
00321     return ucdr_deserialize_sequence_byte_4(mb, endianness, (uint32_t*)array, array_capacity, size);
00322 }
00323 
00324 bool ucdr_deserialize_endian_sequence_double(ucdrBuffer* mb, const ucdrEndianness endianness, double* array, const uint32_t array_capacity, uint32_t* size)
00325 {
00326     return ucdr_deserialize_sequence_byte_8(mb, endianness, (uint64_t*)array, array_capacity, size);
00327 }
00328