diff --git a/build_linux64/libamscppperm1.linux64.a b/build_linux64/libamscppperm1.linux64.a index a5d1701..ac64061 100644 Binary files a/build_linux64/libamscppperm1.linux64.a and b/build_linux64/libamscppperm1.linux64.a differ diff --git a/build_linux64/objstore/permutation_basic.o b/build_linux64/objstore/permutation_basic.o new file mode 100644 index 0000000..3fa13c3 Binary files /dev/null and b/build_linux64/objstore/permutation_basic.o differ diff --git a/include/amscppperm1/amscppperm1.hpp b/include/amscppperm1/amscppperm1.hpp index 4ed5ee9..e40581b 100644 --- a/include/amscppperm1/amscppperm1.hpp +++ b/include/amscppperm1/amscppperm1.hpp @@ -11,7 +11,25 @@ namespace ams namespace perm { -//Buffer operations +//Basic operations on preallocated buffers +//for later C library export + +int factorial(int n); + +int index_to_mindex(int index, int *mindex, int ndim); + +int mindex_to_index(int *mindex, int ndim); +void mindex_to_perm(int *mindex, int *perm, int ndim); +void perm_to_mindex(int *perm, int *mindex, int ndim); + +bool perm_valid(int *perm, int ndim); + +bool mindex_valid(int *mindex, int ndim); + +void index_to_perm(int index, int *perm, int ndim); +int perm_to_index(int *perm, int ndim); + + //Permutation class @@ -22,6 +40,7 @@ public: int *data; permutation(); + permutation(int _dim); ~permutation(); }; diff --git a/src/amscppperm1/permutation_basic.cpp b/src/amscppperm1/permutation_basic.cpp new file mode 100644 index 0000000..74833cc --- /dev/null +++ b/src/amscppperm1/permutation_basic.cpp @@ -0,0 +1,106 @@ +#include + +namespace ams +{ +namespace perm +{ + + //basic factorial found with integer loop + int factorial(int n) + { + int I; + int ret = 0; + if(n>=0) + { + ret = 1; + for(I=0;I=0 && index=(ndim-I)) + { + ret = 0; + break; + } + } + return ret; + } + + int mindex_to_index(int *mindex, int ndim) + { + int ret = -1; + int I; + int K; + if(mindex_valid(mindex,ndim)) + { + K = 1; + ret = 0; + for(I=0;I