X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Farray.h;h=eab98dcaa908e7f37ca1a5c5e62692f8c7232c80;hb=037d8f6e7932459b5d0fb479a2c5030a8088f3d1;hp=c80fb24c5bb5f717a82d7e9a45e0e31685c5d35d;hpb=e7d0a9f16192ceeff9243f0ede8e399ee1ef0d44;p=pspp diff --git a/src/libpspp/array.h b/src/libpspp/array.h index c80fb24c5b..eab98dcaa9 100644 --- a/src/libpspp/array.h +++ b/src/libpspp/array.h @@ -1,3 +1,21 @@ +/* +PSPP - a program for statistical analysis. +Copyright (C) 2017 Free Software Foundation, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + #ifndef ALGORITHM_H #define ALGORITHM_H 1 @@ -78,7 +96,7 @@ size_t partition (void *array, size_t count, size_t size, for the first TRUE_CNT elements and zero for the remaining elements. AUX is passed as auxiliary data to PREDICATE. */ bool is_partitioned (const void *array, size_t count, size_t size, - size_t true_cnt, + size_t n_trues, algo_predicate_func *predicate, const void *aux); /* Randomly reorders ARRAY, which contains COUNT elements of SIZE @@ -108,6 +126,20 @@ void remove_range (void *array, size_t count, size_t size, void remove_element (void *array, size_t count, size_t size, size_t idx); +/* Makes room for N elements starting at IDX in ARRAY, which + initially consists of COUNT elements of SIZE bytes each, by + shifting elements IDX...COUNT (exclusive) to the right by N + positions. */ +void insert_range (void *array, size_t count, size_t size, + size_t idx, size_t n); + +/* Makes room for a new element at IDX in ARRAY, which initially + consists of COUNT elements of SIZE bytes each, by shifting + elements IDX...COUNT (exclusive) to the right by one + position. */ +void insert_element (void *array, size_t count, size_t size, + size_t idx); + /* Moves an element in ARRAY, which consists of COUNT elements of SIZE bytes each, from OLD_IDX to NEW_IDX, shifting around other elements as needed. Runs in O(abs(OLD_IDX - NEW_IDX)) @@ -115,6 +147,12 @@ void remove_element (void *array, size_t count, size_t size, void move_element (void *array, size_t count, size_t size, size_t old_idx, size_t new_idx); +/* Moves N elements in ARRAY starting at OLD_IDX, which consists + of COUNT elements of SIZE bytes each, so that they now start + at NEW_IDX, shifting around other elements as needed. */ +void move_range (void *array, size_t count, size_t size, + size_t old_idx, size_t new_idx, size_t n); + /* Removes elements equal to ELEMENT from ARRAY, which consists of COUNT elements of SIZE bytes each. Returns the number of remaining elements. AUX is passed to COMPARE as auxiliary @@ -203,11 +241,14 @@ void sort_heap (void *array, size_t count, size_t size, algo_compare_func *compare, const void *aux); /* ARRAY contains COUNT elements of SIZE bytes each. This - function tests whether ARRAY is a heap and returns true if so, - false otherwise. Uses COMPARE to compare elements, passing + function tests whether ARRAY is a heap and returns true if so, + false otherwise. Uses COMPARE to compare elements, passing AUX as auxiliary data. */ bool is_heap (const void *array, size_t count, size_t size, algo_compare_func *compare, const void *aux); +/* Reverses the order of ARRAY, which contains COUNT elements of SIZE bytes + each. */ +void reverse_array (void *array, size_t count, size_t size); #endif /* algorithm.h */