blob: ec952fc99936ab1464d76ac75821fc19e47995cb [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001/*-
2 * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
3 * Redistribution and modifications are permitted subject to BSD license.
4 */
Lev Walkina9cc46e2004-09-22 16:06:28 +00005#include <asn_internal.h>
Lev Walkinf15320b2004-06-03 03:38:44 +00006#include <asn_SEQUENCE_OF.h>
7
8typedef A_SEQUENCE_OF(void) asn_sequence;
9
10void
11asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) {
Lev Walkinc2346572004-08-11 09:07:36 +000012 asn_sequence *as = (asn_sequence *)asn_sequence_of_x;
Lev Walkinf15320b2004-06-03 03:38:44 +000013
14 if(as) {
15 void *ptr;
16 int n;
17
18 if(number < 0 || number >= as->count)
19 return; /* Nothing to delete */
20
21 if(_do_free && as->free) {
22 ptr = as->array[number];
23 } else {
24 ptr = 0;
25 }
26
27 /*
28 * Shift all elements to the left to hide the gap.
29 */
30 --as->count;
31 for(n = number; n < as->count; n++)
32 as->array[n] = as->array[n+1];
33
34 /*
35 * Invoke the third-party function only when the state
36 * of the parent structure is consistent.
37 */
38 if(ptr) as->free(ptr);
39 }
40}
41