00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _GDSL_PERM_H_
00026 #define _GDSL_PERM_H_
00027
00028
00029 #include "gdsl_types.h"
00030
00031
00032 #ifdef __cplusplus
00033 extern "C"
00034 {
00035 #endif
00036
00037
00049 typedef struct gdsl_perm* gdsl_perm_t;
00050
00054 typedef enum
00055 {
00057 GDSL_PERM_POSITION_FIRST = 1,
00058
00060 GDSL_PERM_POSITION_LAST = 2
00061
00062 } gdsl_perm_position_t;
00063
00072 typedef void (* gdsl_perm_write_func_t)
00073 (ulong E,
00074 FILE* OUTPUT_FILE,
00075 gdsl_perm_position_t POSITION,
00076 void* USER_DATA
00077 );
00078
00079
00080
00081
00082
00099 extern gdsl_perm_t
00100 gdsl_perm_alloc (const char* NAME,
00101 const ulong N
00102 );
00103
00115 extern void
00116 gdsl_perm_free (gdsl_perm_t P
00117 );
00118
00133 extern gdsl_perm_t
00134 gdsl_perm_copy (const gdsl_perm_t P
00135 );
00136
00137
00138
00139
00140
00150 extern const char*
00151 gdsl_perm_get_name (const gdsl_perm_t P
00152 );
00153
00163 extern ulong
00164 gdsl_perm_get_size (const gdsl_perm_t P
00165 );
00166
00177 extern ulong
00178 gdsl_perm_get_element (const gdsl_perm_t P,
00179 const ulong INDIX
00180 );
00181
00191 extern ulong*
00192 gdsl_perm_get_elements_array (const gdsl_perm_t P
00193 );
00194
00202 extern ulong
00203 gdsl_perm_linear_inversions_count (const gdsl_perm_t P
00204 );
00205
00214 extern ulong
00215 gdsl_perm_linear_cycles_count (const gdsl_perm_t P
00216 );
00217
00226 extern ulong
00227 gdsl_perm_canonical_cycles_count (const gdsl_perm_t P
00228 );
00229
00230
00231
00232
00233
00247 extern gdsl_perm_t
00248 gdsl_perm_set_name (gdsl_perm_t P,
00249 const char* NEW_NAME
00250 );
00251
00264 extern gdsl_perm_t
00265 gdsl_perm_linear_next (gdsl_perm_t P
00266 );
00267
00280 extern gdsl_perm_t
00281 gdsl_perm_linear_prev (gdsl_perm_t P
00282 );
00283
00299 extern gdsl_perm_t
00300 gdsl_perm_set_elements_array (gdsl_perm_t P,
00301 const ulong* ARRAY
00302 );
00303
00304
00305
00306
00307
00322 extern gdsl_perm_t
00323 gdsl_perm_multiply (gdsl_perm_t RESULT,
00324 const gdsl_perm_t ALPHA,
00325 const gdsl_perm_t BETA
00326 );
00327
00341 extern gdsl_perm_t
00342 gdsl_perm_linear_to_canonical (gdsl_perm_t Q,
00343 const gdsl_perm_t P
00344 );
00345
00359 extern gdsl_perm_t
00360 gdsl_perm_canonical_to_linear (gdsl_perm_t Q,
00361 const gdsl_perm_t P
00362 );
00363
00373 extern gdsl_perm_t
00374 gdsl_perm_inverse (gdsl_perm_t P
00375 );
00376
00385 extern gdsl_perm_t
00386 gdsl_perm_reverse (gdsl_perm_t P
00387 );
00388
00400 extern gdsl_perm_t
00401 gdsl_perm_randomize (gdsl_perm_t P
00402 );
00403
00414 extern gdsl_element_t*
00415 gdsl_perm_apply_on_array (gdsl_element_t* V,
00416 const gdsl_perm_t P
00417 );
00418
00419
00420
00421
00422
00439 extern void
00440 gdsl_perm_write (const gdsl_perm_t P,
00441 const gdsl_perm_write_func_t WRITE_F,
00442 FILE* OUTPUT_FILE,
00443 void* USER_DATA
00444 );
00445
00464 extern void
00465 gdsl_perm_write_xml (const gdsl_perm_t P,
00466 const gdsl_write_func_t WRITE_F,
00467 FILE* OUTPUT_FILE,
00468 void* USER_DATA
00469 );
00470
00488 extern void
00489 gdsl_perm_dump (const gdsl_perm_t P,
00490 const gdsl_write_func_t WRITE_F,
00491 FILE* OUTPUT_FILE,
00492 void* USER_DATA
00493 );
00494
00495
00496
00497
00498
00499
00500 #ifdef __cplusplus
00501 }
00502 #endif
00503
00504
00505 #endif
00506