Sync from Azure to LF
[ric-plt/resource-status-manager.git] / RSM / asn1codec / e2ap_engine / asn_SEQUENCE_OF.c
1
2 /*-
3  * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
4  * Redistribution and modifications are permitted subject to BSD license.
5  */
6 #include <asn_internal.h>
7 #include <asn_SEQUENCE_OF.h>
8
9 typedef A_SEQUENCE_OF(void) asn_sequence;
10
11 void
12 asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) {
13         asn_sequence *as = (asn_sequence *)asn_sequence_of_x;
14
15         if(as) {
16                 void *ptr;
17                 int n;
18
19                 if(number < 0 || number >= as->count)
20                         return; /* Nothing to delete */
21
22                 if(_do_free && as->free) {
23                         ptr = as->array[number];
24                 } else {
25                         ptr = 0;
26                 }
27
28                 /*
29                  * Shift all elements to the left to hide the gap.
30                  */
31                 --as->count;
32                 for(n = number; n < as->count; n++)
33                         as->array[n] = as->array[n+1];
34
35                 /*
36                  * Invoke the third-party function only when the state
37                  * of the parent structure is consistent.
38                  */
39                 if(ptr) as->free(ptr);
40         }
41 }
42