1 /*-
2  * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
3  * Redistribution and modifications are permitted subject to BSD license.
4  */
5 #include "asn1/asn1c/asn_internal.h"
6 #include "asn1/asn1c/asn_SEQUENCE_OF.h"
7 
8 typedef A_SEQUENCE_OF(void) asn_sequence;
9 
10 void
asn_sequence_del(void * asn_sequence_of_x,int number,int _do_free)11 asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) {
12 	asn_sequence *as = (asn_sequence *)asn_sequence_of_x;
13 
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 
42