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
00026 #ifndef _GDSL_PERM_H_
00027 #define _GDSL_PERM_H_
00028
00029
00030 #include "gdsl_types.h"
00031
00032
00033 #ifdef __cplusplus
00034 extern "C"
00035 {
00036 #endif
00037
00038
00050 typedef struct gdsl_perm* gdsl_perm_t;
00051
00055 typedef enum
00056 {
00058 GDSL_PERM_POSITION_FIRST = 1,
00059
00061 GDSL_PERM_POSITION_LAST = 2
00062
00063 } gdsl_perm_position_t;
00064
00073 typedef void (* gdsl_perm_write_func_t)
00074 (ulong E,
00075 FILE* OUTPUT_FILE,
00076 gdsl_location_t POSITION,
00077 void* USER_DATA
00078 );
00079
00080 typedef struct gdsl_perm_data* gdsl_perm_data_t;
00081
00082
00083
00084
00085
00102 extern gdsl_perm_t
00103 gdsl_perm_alloc (const char* NAME,
00104 const ulong N
00105 );
00106
00118 extern void
00119 gdsl_perm_free (gdsl_perm_t P
00120 );
00121
00136 extern gdsl_perm_t
00137 gdsl_perm_copy (const gdsl_perm_t P
00138 );
00139
00140
00141
00142
00143
00153 extern const char*
00154 gdsl_perm_get_name (const gdsl_perm_t P
00155 );
00156
00166 extern ulong
00167 gdsl_perm_get_size (const gdsl_perm_t P
00168 );
00169
00180 extern ulong
00181 gdsl_perm_get_element (const gdsl_perm_t P,
00182 const ulong INDIX
00183 );
00184
00194 extern ulong*
00195 gdsl_perm_get_elements_array (const gdsl_perm_t P
00196 );
00197
00205 extern ulong
00206 gdsl_perm_linear_inversions_count (const gdsl_perm_t P
00207 );
00208
00217 extern ulong
00218 gdsl_perm_linear_cycles_count (const gdsl_perm_t P
00219 );
00220
00229 extern ulong
00230 gdsl_perm_canonical_cycles_count (const gdsl_perm_t P
00231 );
00232
00233
00234
00235
00236
00250 extern gdsl_perm_t
00251 gdsl_perm_set_name (gdsl_perm_t P,
00252 const char* NEW_NAME
00253 );
00254
00267 extern gdsl_perm_t
00268 gdsl_perm_linear_next (gdsl_perm_t P
00269 );
00270
00283 extern gdsl_perm_t
00284 gdsl_perm_linear_prev (gdsl_perm_t P
00285 );
00286
00302 extern gdsl_perm_t
00303 gdsl_perm_set_elements_array (gdsl_perm_t P,
00304 const ulong* ARRAY
00305 );
00306
00307
00308
00309
00310
00325 extern gdsl_perm_t
00326 gdsl_perm_multiply (gdsl_perm_t RESULT,
00327 const gdsl_perm_t ALPHA,
00328 const gdsl_perm_t BETA
00329 );
00330
00344 extern gdsl_perm_t
00345 gdsl_perm_linear_to_canonical (gdsl_perm_t Q,
00346 const gdsl_perm_t P
00347 );
00348
00362 extern gdsl_perm_t
00363 gdsl_perm_canonical_to_linear (gdsl_perm_t Q,
00364 const gdsl_perm_t P
00365 );
00366
00376 extern gdsl_perm_t
00377 gdsl_perm_inverse (gdsl_perm_t P
00378 );
00379
00388 extern gdsl_perm_t
00389 gdsl_perm_reverse (gdsl_perm_t P
00390 );
00391
00403 extern gdsl_perm_t
00404 gdsl_perm_randomize (gdsl_perm_t P
00405 );
00406
00417 extern gdsl_element_t*
00418 gdsl_perm_apply_on_array (gdsl_element_t* V,
00419 const gdsl_perm_t P
00420 );
00421
00422
00423
00424
00425
00442 extern void
00443 gdsl_perm_write (const gdsl_perm_t P,
00444 const gdsl_write_func_t WRITE_F,
00445 FILE* OUTPUT_FILE,
00446 void* USER_DATA
00447 );
00448
00467 extern void
00468 gdsl_perm_write_xml (const gdsl_perm_t P,
00469 const gdsl_write_func_t WRITE_F,
00470 FILE* OUTPUT_FILE,
00471 void* USER_DATA
00472 );
00473
00491 extern void
00492 gdsl_perm_dump (const gdsl_perm_t P,
00493 const gdsl_write_func_t WRITE_F,
00494 FILE* OUTPUT_FILE,
00495 void* USER_DATA
00496 );
00497
00498
00499
00500
00501
00502
00503 #ifdef __cplusplus
00504 }
00505 #endif
00506
00507
00508 #endif
00509
00510