Snapdragon® Telematics Application Framework (TelAF) Interface Specification
le_safeRef.h
Go to the documentation of this file.
1 
183 #ifndef LEGATO_SAFEREF_INCLUDE_GUARD
184 #define LEGATO_SAFEREF_INCLUDE_GUARD
185 
186 //--------------------------------------------------------------------------------------------------
190 //--------------------------------------------------------------------------------------------------
191 #define LIMIT_MAX_SAFE_REF_NAME_LEN 31
192 #define LIMIT_MAX_SAFE_REF_NAME_BYTES (LIMIT_MAX_SAFE_REF_NAME_LEN + 1)
193 
194 
195 //--------------------------------------------------------------------------------------------------
199 //--------------------------------------------------------------------------------------------------
200 typedef struct le_ref_Map *le_ref_MapRef_t;
201 
202 
203 //--------------------------------------------------------------------------------------------------
207 //--------------------------------------------------------------------------------------------------
208 typedef struct le_ref_Iter *le_ref_IterRef_t;
209 
210 
211 //--------------------------------------------------------------------------------------------------
215 //--------------------------------------------------------------------------------------------------
216 struct le_ref_Block;
217 
218 
219 // Internal block sizing
220 #define LE_REF_BLOCK_SIZE(numRefs) (1 + (numRefs))
221 
222 //--------------------------------------------------------------------------------------------------
228 //--------------------------------------------------------------------------------------------------
230 {
232 
233 #if LE_CONFIG_SAFE_REF_NAMES_ENABLED
234  char name[LIMIT_MAX_SAFE_REF_NAME_BYTES];
235  le_log_TraceRef_t traceRef;
236 #endif
237 
238  size_t index;
239  bool advance;
240  size_t size;
241  size_t maxRefs;
242  uint32_t mapBase;
243 
244  struct le_ref_Block *blocksPtr;
245 };
246 
247 //--------------------------------------------------------------------------------------------------
254 //--------------------------------------------------------------------------------------------------
255 #define LE_REF_DEFINE_STATIC_MAP(name, maxRefs) \
256  static struct le_ref_Map _ref_##name##Map; \
257  static void *_ref_##name##Data[LE_REF_BLOCK_SIZE(maxRefs)]
258 
260 //--------------------------------------------------------------------------------------------------
264 //--------------------------------------------------------------------------------------------------
265 le_ref_MapRef_t _le_ref_InitStaticMap
266 (
267 #if LE_CONFIG_SAFE_REF_NAMES_ENABLED
268  const char *name,
269 #endif
270  size_t maxRefs,
271  le_ref_MapRef_t mapPtr,
272  void *data
273 );
275 
276 //--------------------------------------------------------------------------------------------------
287 //--------------------------------------------------------------------------------------------------
288 #if LE_CONFIG_SAFE_REF_NAMES_ENABLED
289 # define le_ref_InitStaticMap(name, maxRefs) \
290  _le_ref_InitStaticMap(#name, (maxRefs), &_ref_##name##Map, _ref_##name##Data)
291 #else /* if not LE_CONFIG_SAFE_REF_NAMES_ENABLED */
292 # define le_ref_InitStaticMap(name, maxRefs) \
293  _le_ref_InitStaticMap((maxRefs), &_ref_##name##Map, _ref_##name##Data)
294 #endif /* end LE_CONFIG_SAFE_REF_NAMES_ENABLED */
295 
296 
297 #if LE_CONFIG_SAFE_REF_NAMES_ENABLED
298 //--------------------------------------------------------------------------------------------------
308 //--------------------------------------------------------------------------------------------------
309 le_ref_MapRef_t le_ref_CreateMap
310 (
311  const char *name,
312  size_t maxRefs
313 );
314 #else /* if not LE_CONFIG_SAFE_REF_NAMES_ENABLED */
315 //--------------------------------------------------------------------------------------------------
320 //--------------------------------------------------------------------------------------------------
321 le_ref_MapRef_t _le_ref_CreateMap(size_t maxRefs);
323 //--------------------------------------------------------------------------------------------------
333 //--------------------------------------------------------------------------------------------------
334 LE_DECLARE_INLINE le_ref_MapRef_t le_ref_CreateMap
335 (
336  const char *name,
337  size_t maxRefs
338 )
339 {
340  LE_UNUSED(name);
341  return _le_ref_CreateMap(maxRefs);
342 }
343 #endif /* end LE_CONFIG_SAFE_REF_NAMES_ENABLED */
344 
345 
346 //--------------------------------------------------------------------------------------------------
353 //--------------------------------------------------------------------------------------------------
354 void* le_ref_CreateRef
355 (
356  le_ref_MapRef_t mapRef,
357  void* ptr
358 );
359 
360 
361 //--------------------------------------------------------------------------------------------------
369 //--------------------------------------------------------------------------------------------------
370 void* le_ref_Lookup
371 (
372  le_ref_MapRef_t mapRef,
373  void* safeRef
374 );
375 
376 
377 //--------------------------------------------------------------------------------------------------
381 //--------------------------------------------------------------------------------------------------
382 void le_ref_DeleteRef
383 (
384  le_ref_MapRef_t mapRef,
385  void* safeRef
386 );
387 
388 
389 //--------------------------------------------------------------------------------------------------
399 //--------------------------------------------------------------------------------------------------
401 (
402  le_ref_MapRef_t mapRef
403 );
404 
405 
406 //--------------------------------------------------------------------------------------------------
414 //--------------------------------------------------------------------------------------------------
416 (
417  le_ref_IterRef_t iteratorRef
418 );
419 
420 
421 //--------------------------------------------------------------------------------------------------
431 //--------------------------------------------------------------------------------------------------
432 const void* le_ref_GetSafeRef
433 (
434  le_ref_IterRef_t iteratorRef
435 );
436 
437 
438 //--------------------------------------------------------------------------------------------------
447 //--------------------------------------------------------------------------------------------------
448 void* le_ref_GetValue
449 (
450  le_ref_IterRef_t iteratorRef
451 );
452 
453 
454 //--------------------------------------------------------------------------------------------------
458 //--------------------------------------------------------------------------------------------------
460 (
461  le_ref_MapRef_t mapRef
462 );
463 
464 #endif // LEGATO_SAFEREF_INCLUDE_GUARD
le_ref_IterRef_t le_ref_GetIterator(le_ref_MapRef_t mapRef)
uint32_t mapBase
Randomized "base" for references in this map.
Definition: le_safeRef.h:242
bool advance
Iterator advance flag.
Definition: le_safeRef.h:239
#define LIMIT_MAX_SAFE_REF_NAME_BYTES
Definition: le_safeRef.h:192
void le_ref_EnableTrace(le_ref_MapRef_t mapRef)
const void * le_ref_GetSafeRef(le_ref_IterRef_t iteratorRef)
Definition: le_doublyLinkedList.h:200
size_t size
Total allocated entries.
Definition: le_safeRef.h:240
void * le_ref_GetValue(le_ref_IterRef_t iteratorRef)
size_t index
Iterator.
Definition: le_safeRef.h:238
LE_DECLARE_INLINE le_ref_MapRef_t le_ref_CreateMap(const char *name, size_t maxRefs)
Definition: le_safeRef.h:335
le_result_t le_ref_NextNode(le_ref_IterRef_t iteratorRef)
size_t maxRefs
Nominal maximum number of safe references.
Definition: le_safeRef.h:241
Definition: le_safeRef.h:229
#define LE_UNUSED(v)
Definition: le_basics.h:379
#define LE_DECLARE_INLINE
Definition: le_basics.h:330
void * le_ref_Lookup(le_ref_MapRef_t mapRef, void *safeRef)
void le_ref_DeleteRef(le_ref_MapRef_t mapRef, void *safeRef)
le_dls_Link_t entry
Map list entry, for inspection tools.
Definition: le_safeRef.h:231
le_result_t
Definition: le_basics.h:45
void * le_ref_CreateRef(le_ref_MapRef_t mapRef, void *ptr)
struct le_ref_Block * blocksPtr
Block list head.
Definition: le_safeRef.h:244
struct le_ref_Iter * le_ref_IterRef_t
Definition: le_safeRef.h:208