/* Copyright 2015-2022 Ian Jauslin Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /* Array structures */ #ifndef ARRAY_H #define ARRAY_H #include "types.h" // init int init_Int_Array(Int_Array* array, int memory); int free_Int_Array(Int_Array array); // copy int int_array_cpy(Int_Array input, Int_Array* output); int int_array_cpy_noinit(Int_Array input, Int_Array* output); // resize memory int int_array_resize(Int_Array* array, int newsize); // add a value int int_array_append(int val, Int_Array* output); // add a value only if it is not already present int int_array_append_unique(int val, Int_Array* output); // concatenate int int_array_concat(Int_Array input, Int_Array* output); // concat but only add values that are not already present in the array int int_array_concat_unique(Int_Array input, Int_Array* output); // find (does not assume the array is sorted) int int_array_find(int val, Int_Array array); int int_array_find_err(int val, Int_Array array); // sort int int_array_sort(Int_Array array, int begin, int end); // compare Int_Array's int int_array_cmp(Int_Array array1, Int_Array array2); // check whether an array is a sub-array of another int int_array_is_subarray_ordered(Int_Array input, Int_Array test_array); // print array int int_array_print(Int_Array array); // read array int int_array_read(Char_Array str, Int_Array* array); // Char_Array // init int init_Char_Array(Char_Array* array, int memory); int free_Char_Array(Char_Array array); // copy int char_array_cpy(Char_Array input, Char_Array* output); int char_array_cpy_noinit(Char_Array input, Char_Array* output); // resize memory int char_array_resize(Char_Array* array, int newsize); // add a value int char_array_append(char val, Char_Array* output); int char_array_append_str(char* str, Char_Array* output); // concatenate int char_array_concat(Char_Array input, Char_Array* output); // substring int char_array_substring(Char_Array str, int begin, int end, Char_Array* substr); // convert to char* int char_array_to_str(Char_Array input, char** output); // noinit (changes the size of input if needed) char* char_array_to_str_noinit(Char_Array* input); // convert from char* int str_to_char_array(char* str, Char_Array* output); // compare char_array's int char_array_cmp(Char_Array char_array1, Char_Array char_array2); // compare a char_array and a char* int char_array_cmp_str(Char_Array char_array, char* str); // format strings int char_array_snprintf(Char_Array* output, char* fmt, ...); // replace '*' with given character int replace_star(char c, Char_Array str, Char_Array* out); // Str_Array // init int init_Str_Array(Str_Array* array, int memory); int free_Str_Array(Str_Array array); // copy int str_array_cpy(Str_Array input, Str_Array* output); int str_array_cpy_noinit(Str_Array input, Str_Array* output); // resize memory int str_array_resize(Str_Array* array, int newsize); // add a value int str_array_append(Char_Array val, Str_Array* output); int str_array_append_noinit(Char_Array val, Str_Array* output); // concatenate int str_array_concat(Str_Array input, Str_Array* output); int str_array_concat_noinit(Str_Array input, Str_Array* output); // Labels // allocate memory int init_Labels(Labels* labels,int size); // free memory int free_Labels(Labels labels); // resize the memory allocated to a labels table int resize_labels(Labels* labels,int new_size); // copy a labels table int labels_cpy(Labels input, Labels* output); int labels_cpy_noinit(Labels input, Labels* output); // append an element to a labels table int labels_append(Char_Array label, int index, Labels* output); int labels_append_noinit(Char_Array label, int index, Labels* output); // concatenate two labels tables int labels_concat(Labels input, Labels* output); #endif