1 /* Steven Andrews, 10/17/01 2 Simple routines for manipulating vectors of integers. 3 See documentation called Zn_doc.doc. 4 Copyright 2003-2007 by Steven Andrews. This work is distributed under the terms 5 of the Gnu Lesser General Public License (LGPL). */ 6 7 #ifndef __Zn_h 8 #define __Zn_h 9 10 #include <stdlib.h> 11 #include <stdio.h> 12 #define allocZV(n) ((int *) calloc(n,sizeof(int))) 13 #define freeZV(a) free(a) 14 15 int *setstdZV(int *c,int n,int k); 16 int *printZV(int *c,int n); 17 char *Zn_vect2csvstring(int *c,int n,char *string); 18 int *fprintZV(FILE *stream,int *c,int n); 19 int minZV(int *a,int n); 20 int maxZV(int *a,int n); 21 int *copyZV(int *a,int *c,int n); 22 int *sumZV(float ax,int *a,float bx,int *b,int *c,int n); 23 int *deriv1ZV(int *a,int *c,int n); 24 int *deriv2ZV(int *a,int *c,int n); 25 int productZV(int *a,int n); 26 int intfindZV(int *a,int n,int i); 27 int indx2addZV(int *indx,int *dim,int rank); 28 int *add2indxZV(int add,int *indx,int *dim,int rank); 29 int nextaddZV(int add,int *indx1,int *indx2,int *dim,int rank); 30 int indx2add3ZV(int *indx,int rank); 31 int *add2indx3ZV(int add,int *indx,int rank); 32 int neighborZV(int *indx,int *c,int *dim,int rank,int type,int *wrap,int *mid); 33 int Zn_sameset(const int *a,const int *b,int *work,int n); 34 void Zn_sort(int *a,int *b,int n); 35 int Zn_issort(int *a,int n); 36 37 /************ combinatorics ***********/ 38 39 int Zn_incrementcounter(int *a,int digits,int base); 40 int Zn_permute(int *a,int *b,int n,int k); 41 int Zn_permutelex(int *seq,int n); 42 43 44 #endif 45