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