]>
git.ipfire.org Git - thirdparty/bash.git/blob - array.h
1 /* array.h -- definitions for the interface exported by array.c that allows
2 the rest of the shell to manipulate array variables. */
4 /* Copyright (C) 1997 Free Software Foundation, Inc.
6 This file is part of GNU Bash, the Bourne Again SHell.
8 Bash is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
13 Bash is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License along
19 with Bash; see the file COPYING. If not, write to the Free Software
20 Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
27 typedef intmax_t arrayind_t
;
29 enum atype
{array_indexed
, array_assoc
};
31 typedef struct array
{
33 arrayind_t max_index
, num_elements
;
34 struct array_element
*head
;
37 typedef struct array_element
{
40 struct array_element
*next
, *prev
;
43 typedef int sh_ae_map_func_t
__P((ARRAY_ELEMENT
*));
45 /* Basic operations on entire arrays */
46 extern ARRAY
*array_create
__P((void));
47 extern void array_flush
__P((ARRAY
*));
48 extern void array_dispose
__P((ARRAY
*));
49 extern ARRAY
*array_copy
__P((ARRAY
*));
50 extern ARRAY
*array_slice
__P((ARRAY
*, ARRAY_ELEMENT
*, ARRAY_ELEMENT
*));
51 extern void array_walk
__P((ARRAY
*, sh_ae_map_func_t
*));
53 extern ARRAY_ELEMENT
*array_shift
__P((ARRAY
*, int, int));
54 extern int array_rshift
__P((ARRAY
*, int, char *));
55 extern ARRAY
*array_quote
__P((ARRAY
*));
57 extern char *array_subrange
__P((ARRAY
*, arrayind_t
, arrayind_t
, int));
58 extern char *array_patsub
__P((ARRAY
*, char *, char *, int));
60 /* Basic operations on array elements. */
61 extern ARRAY_ELEMENT
*array_create_element
__P((arrayind_t
, char *));
62 extern ARRAY_ELEMENT
*array_copy_element
__P((ARRAY_ELEMENT
*));
63 extern void array_dispose_element
__P((ARRAY_ELEMENT
*));
65 extern int array_insert
__P((ARRAY
*, arrayind_t
, char *));
66 extern ARRAY_ELEMENT
*array_remove
__P((ARRAY
*, arrayind_t
));
67 extern char *array_reference
__P((ARRAY
*, arrayind_t
));
69 /* Converting to and from arrays */
70 extern WORD_LIST
*array_to_word_list
__P((ARRAY
*));
71 extern ARRAY
*array_from_word_list
__P((WORD_LIST
*));
72 extern ARRAY
*array_assign_list
__P((ARRAY
*, WORD_LIST
*));
74 extern char **array_to_argv
__P((ARRAY
*));
76 extern char *array_to_assign
__P((ARRAY
*, int));
77 extern char *array_to_string
__P((ARRAY
*, char *, int));
78 extern ARRAY
*array_from_string
__P((char *, char *));
80 /* Flags for array_shift */
81 #define AS_DISPOSE 0x01
83 #define array_num_elements(a) ((a)->num_elements)
84 #define array_max_index(a) ((a)->max_index)
85 #define array_head(a) ((a)->head)
86 #define array_empty(a) ((a)->num_elements == 0)
88 #define element_value(ae) ((ae)->value)
89 #define element_index(ae) ((ae)->ind)
90 #define element_forw(ae) ((ae)->next)
91 #define element_back(ae) ((ae)->prev)
93 #define ALL_ELEMENT_SUB(c) ((c) == '@' || (c) == '*')
95 #endif /* _ARRAY_H_ */