1 /*********************************************************************** 2 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold 3 This program is free software; you can redistribute it and/or modify 4 it under the terms of the GNU General Public License as published by 5 the Free Software Foundation; either version 2, or (at your option) 6 any later version. 7 8 This program is distributed in the hope that it will be useful, 9 but WITHOUT ANY WARRANTY; without even the implied warranty of 10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 GNU General Public License for more details. 12 ***********************************************************************/ 13 #ifndef FC__STRING_VECTOR_H 14 #define FC__STRING_VECTOR_H 15 16 #ifdef __cplusplus 17 extern "C" { 18 #endif /* __cplusplus */ 19 20 /* utility */ 21 #include "support.h" /* bool type. */ 22 23 struct astring; 24 25 struct strvec; /* Opaque. */ 26 27 struct strvec *strvec_new(void); 28 void strvec_destroy(struct strvec *psv); 29 30 void strvec_reserve(struct strvec *psv, size_t reserve); 31 void strvec_store(struct strvec *psv, const char *const *vec, size_t size); 32 void strvec_from_str(struct strvec *psv, char separator, const char *str); 33 void strvec_clear(struct strvec *psv); 34 void strvec_remove_empty(struct strvec *psv); 35 void strvec_remove_duplicate(struct strvec *psv, 36 int (*cmp_func) (const char *, const char *)); 37 void strvec_copy(struct strvec *dest, const struct strvec *src); 38 void strvec_sort(struct strvec *psv, int (*sort_func) (const char *const *, 39 const char *const *)); 40 41 void strvec_prepend(struct strvec *psv, const char *string); 42 void strvec_append(struct strvec *psv, const char *string); 43 void strvec_insert(struct strvec *psv, size_t svindex, const char *string); 44 bool strvec_set(struct strvec *psv, size_t svindex, const char *string); 45 bool strvec_remove(struct strvec *psv, size_t svindex); 46 47 size_t strvec_size(const struct strvec *psv); 48 const char *const *strvec_data(const struct strvec *psv); 49 bool strvec_index_valid(const struct strvec *psv, size_t svindex); 50 const char *strvec_get(const struct strvec *psv, size_t svindex); 51 void strvec_to_str(const struct strvec *psv, char separator, 52 char *buf, size_t buf_len); 53 const char *strvec_to_or_list(const struct strvec *psv, 54 struct astring *astr); 55 const char *strvec_to_and_list(const struct strvec *psv, 56 struct astring *astr); 57 58 /* Iteration macro. */ 59 #define strvec_iterate(psv, str) \ 60 { \ 61 size_t _id; \ 62 const char *str; \ 63 for (_id = 0; _id < strvec_size((psv)); _id++) { \ 64 str = strvec_get((psv), _id); 65 66 #define strvec_iterate_end \ 67 } \ 68 } 69 70 #ifdef __cplusplus 71 } 72 #endif /* __cplusplus */ 73 74 #endif /* FC__STRING_VECTOR_H */ 75