blob: 4a47bc1d1071ccba00bdd6312d90a2d8c418564f [file] [log] [blame]
ss412g1a79bdf2019-10-24 12:03:05 +03001
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
9typedef A_SEQUENCE_OF(void) asn_sequence;
10
11void
12asn_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