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.
Dependents: mbed-os-example-mros2 example-mbed-mros2-sub-pose example-mbed-mros2-pub-twist example-mbed-mros2-mturtle-teleop
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
Generated on Sun Jul 31 2022 04:49:48 by
1.7.2