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 PLINT_DATA_OP_H
00026 #define PLINT_DATA_OP_H
00027
00039 #include "type.h"
00040
00041
00042 __BEGIN_DECLS
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 int plint_num_nat(plint_num_t NUMBER);
00053 plint_num_t plint_num_rnd(plint_num_t NUMBER);
00054 plint_num_t plint_num_min(plint_num_t LEFT, plint_num_t RIGHT);
00055 plint_num_t plint_num_max(plint_num_t LEFT, plint_num_t RIGHT);
00056
00057
00058
00059
00060
00061
00062 void plint_num_add(plint_num_t * PLEFT, plint_num_t RIGHT);
00063 void plint_num_sub(plint_num_t * PLEFT, plint_num_t RIGHT);
00064 void plint_num_mul(plint_num_t * PLEFT, plint_num_t RIGHT);
00065 void plint_num_div(plint_num_t * PLEFT, plint_num_t RIGHT);
00066 void plint_num_rem(plint_num_t * PLEFT, plint_num_t RIGHT);
00067 void plint_num_umin(plint_num_t * PNUMBER);
00068 void plint_num_upls(plint_num_t * PNUMBER);
00069 void plint_num_udiv(plint_num_t * PNUMBER);
00070
00071
00072
00073
00074
00075
00076
00077 void plint_num_and(plint_num_t * PLEFT, plint_num_t RIGHT);
00078 void plint_num_or(plint_num_t * PLEFT, plint_num_t RIGHT);
00079 void plint_num_xor(plint_num_t * PLEFT, plint_num_t RIGHT);
00080 void plint_num_unot(plint_num_t * PLEFT);
00081
00082
00083
00084
00085
00086
00087
00088 int plint_num_equ(plint_num_t LEFT, plint_num_t RIGHT);
00089 int plint_num_neq(plint_num_t LEFT, plint_num_t RIGHT);
00090 int plint_num_lt(plint_num_t LEFT, plint_num_t RIGHT);
00091 int plint_num_gt(plint_num_t LEFT, plint_num_t RIGHT);
00092 int plint_num_lte(plint_num_t LEFT, plint_num_t RIGHT);
00093 int plint_num_gte(plint_num_t LEFT, plint_num_t RIGHT);
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 inline void plint_pnt_add(plint_pnt_t * PLEFT, plint_pnt_t RIGHT);
00105 inline void plint_pnt_sub(plint_pnt_t * PLEFT, plint_pnt_t RIGHT);
00106 void plint_pnt_mul(plint_pnt_t * PLEFT, plint_pnt_t RIGHT);
00107 void plint_pnt_div(plint_pnt_t * PLEFT, plint_pnt_t RIGHT) __attribute__((weak));
00108 inline void plint_pnt_umin(plint_pnt_t * PPOINT);
00109 inline void plint_pnt_ucnj(plint_pnt_t * PPOINT);
00110
00111
00112
00113
00114
00115 inline int plint_pnt_equ(plint_pnt_t LEFT, plint_pnt_t RIGHT);
00116 inline int plint_pnt_neq(plint_pnt_t LEFT, plint_pnt_t RIGHT);
00117 inline int plint_pnt_lte(plint_pnt_t LEFT, plint_pnt_t RIGHT);
00118 inline int plint_pnt_gte(plint_pnt_t LEFT, plint_pnt_t RIGHT);
00119 inline int plint_pnt_lt(plint_pnt_t LEFT, plint_pnt_t RIGHT);
00120 inline int plint_pnt_gt(plint_pnt_t LEFT, plint_pnt_t RIGHT);
00121
00122
00123
00124
00125
00126 void plint_pnt_num_add(plint_pnt_t * PPOINT, plint_num_t NUMBER);
00127 void plint_pnt_num_sub(plint_pnt_t * PPOINT, plint_num_t NUMBER);
00128 void plint_pnt_num_mul(plint_pnt_t * PPOINT, plint_num_t NUMBER);
00129 void plint_pnt_num_div(plint_pnt_t * PPOINT, plint_num_t NUMBER);
00130 void plint_pnt_num_rem(plint_pnt_t * PPOINT, plint_num_t NUMBER);
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141 inline void plint_2pt_add(plint_2pt_t * PZPOINTS, plint_2pt_t ZPOINTS);
00142 inline void plint_2pt_sub(plint_2pt_t * PZPOINTS, plint_2pt_t ZPOINTS);
00143 inline void plint_2pt_mul(plint_2pt_t * PZPOINTS, plint_2pt_t ZPOINTS);
00144 inline void plint_2pt_invX(plint_2pt_t * PZPOINTS);
00145 inline void plint_2pt_invY(plint_2pt_t * PZPOINTS);
00146 inline void plint_2pt_invO(plint_2pt_t * PZPOINTS);
00147
00148
00149
00150
00151
00152 inline void plint_2pt_int(plint_2pt_t * PZPOINTS, plint_2pt_t ZPOINTS);
00153 inline void plint_2pt_reu(plint_2pt_t * PZPOINTS, plint_2pt_t ZPOINTS);
00154
00155
00156
00157
00158
00159 inline int plint_2pt_equ(plint_2pt_t LEFT, plint_2pt_t RIGHT);
00160 inline int plint_2pt_neq(plint_2pt_t LEFT, plint_2pt_t RIGHT);
00161 inline int plint_2pt_lt (plint_2pt_t LEFT, plint_2pt_t RIGHT);
00162 inline int plint_2pt_gt (plint_2pt_t LEFT, plint_2pt_t RIGHT);
00163 inline int plint_2pt_lte(plint_2pt_t LEFT, plint_2pt_t RIGHT);
00164 inline int plint_2pt_gte(plint_2pt_t LEFT, plint_2pt_t RIGHT);
00165
00166
00167
00168
00169
00170 void plint_2pt_num_add(plint_2pt_t * PZPOINTS, plint_num_t NUMBER);
00171 void plint_2pt_num_sub(plint_2pt_t * PZPOINTS, plint_num_t NUMBER);
00172 void plint_2pt_num_mul(plint_2pt_t * PZPOINTS, plint_num_t NUMBER);
00173 void plint_2pt_num_div(plint_2pt_t * PZPOINTS, plint_num_t NUMBER);
00174 void plint_2pt_num_rem(plint_2pt_t * PZPOINTS, plint_num_t NUMBER);
00175
00176
00177
00178
00179
00180 void plint_2pt_pnt_add(plint_2pt_t * PZPOINTS, plint_pnt_t POINT);
00181 void plint_2pt_pnt_sub(plint_2pt_t * PZPOINTS, plint_pnt_t POINT);
00182 void plint_2pt_pnt_mul(plint_2pt_t * PZPOINTS, plint_pnt_t POINT);
00183
00184
00185
00186
00187
00188 inline int plint_pnt_in_2pt(plint_pnt_t POINT, plint_2pt_t ZPOINTS);
00189 inline int plint_pnt_ine_2pt(plint_pnt_t POINT, plint_2pt_t ZPOINTS);
00190 inline int plint_pnt_out_2pt(plint_pnt_t POINT, plint_2pt_t ZPOINTS);
00191 inline int plint_pnt_oute_2pt(plint_pnt_t POINT, plint_2pt_t ZPOINTS);
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201 #define plint_str_add plint_str_cat
00202 void plint_str_sub(plint_str_t * PLEFT, plint_str_t RIGHT);
00203 void plint_str_rem(plint_str_t * PLEFT, plint_str_t RIGHT);
00204 void plint_str_mul(plint_str_t * PSTRING, size_t TIMES);
00205 void plint_str_sed(plint_str_t * PSTRING, plint_str_t REGEXP, plint_str_t REPLACE);
00206 plint_tab_t plint_str_rex(plint_str_t LEFT, plint_str_t RIGHT);
00207 void plint_str_loc(plint_str_t * PSTRING);
00208 void plint_str_upc(plint_str_t * PSTRING);
00209
00210
00211
00212
00213
00214 int plint_str_inc(plint_str_t STRING1, plint_str_t STRING2, int DIRECTION);
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224 #define plint_tab_add plint_tab_cat
00225 void plint_tab_mul(plint_tab_t * PARRAY, size_t TIMES);
00226
00227
00228
00229
00230
00231 int plint_tab_equ(plint_tab_t LEFT, plint_tab_t RIGHT);
00232 int plint_tab_neq(plint_tab_t LEFT, plint_tab_t RIGHT);
00233
00234
00235
00236
00237
00238
00239 int plint_tab_lt(plint_ptr_t * LEFT, plint_tab_t * RIGHT);
00240 int plint_tab_gt(plint_tab_t * LEFT, plint_ptr_t * RIGHT);
00241 int plint_tab_lte(plint_ptr_t * LEFT, plint_tab_t * RIGHT);
00242 int plint_tab_gte(plint_tab_t * LEFT, plint_ptr_t * RIGHT);
00243
00244
00245
00246
00247
00248 void plint_tab_num_add(plint_tab_t * PARRAY, plint_num_t NUMBER);
00249 void plint_tab_num_sub(plint_tab_t * PARRAY, plint_num_t NUMBER, int DIRECTION);
00250 void plint_tab_num_mul(plint_tab_t * PARRAY, plint_num_t NUMBER);
00251 void plint_tab_num_div(plint_tab_t * PARRAY, plint_num_t NUMBER, int DIRECTION);
00252 void plint_tab_num_rem(plint_tab_t * PARRAY, plint_num_t NUMBER, int DIRECTION);
00253 void plint_tab_num_and(plint_tab_t * PARRAY, plint_num_t NUMBER);
00254 void plint_tab_num_or (plint_tab_t * PARRAY, plint_num_t NUMBER);
00255 void plint_tab_num_xor(plint_tab_t * PARRAY, plint_num_t NUMBER);
00256
00257 void plint_tab_pnt_add(plint_tab_t * PARRAY, plint_pnt_t POINT);
00258 void plint_tab_pnt_sub(plint_tab_t * PARRAY, plint_pnt_t POINT, int DIRECTION);
00259 void plint_tab_pnt_mul(plint_tab_t * PARRAY, plint_pnt_t POINT);
00260 void plint_tab_pnt_div(plint_tab_t * PARRAY, plint_pnt_t POINT, int DIRECTION);
00261
00262 void plint_tab_str_add(plint_tab_t * PARRAY, plint_str_t STRING, int DIRECTION);
00263 void plint_tab_str_sub(plint_tab_t * PARRAY, plint_str_t STRING, int DIRECTION);
00264 void plint_tab_str_rem(plint_tab_t * PARRAY, plint_str_t STRING, int DIRECTION);
00265
00266 void plint_tab_bol_and(plint_tab_t * PARRAY, plint_bol_t BOOLEAN);
00267 void plint_tab_bol_or (plint_tab_t * PARRAY, plint_bol_t BOOLEAN);
00268 void plint_tab_bol_xor(plint_tab_t * PARRAY, plint_bol_t BOOLEAN);
00269
00270
00271
00272
00273
00274 inline void plint_hsh_add(plint_hsh_t * PLEFT, plint_hsh_t RIGHT);
00275 inline void plint_hsh_sub(plint_hsh_t * PLEFT, plint_hsh_t RIGHT);
00276 void plint_hsh_mul(plint_hsh_t * PLEFT, plint_hsh_t RIGHT);
00277 #define plint_hsh_div plint_hsh_sub
00278 #define plint_hsh_or plint_hsh_add
00279 #define plint_hsh_and plint_hsh_mul
00280
00281
00282
00283
00284
00285 inline int plint_hsh_equ(plint_hsh_t LEFT, plint_hsh_t RIGHT);
00286 inline int plint_hsh_neq(plint_hsh_t LEFT, plint_hsh_t RIGHT);
00287
00288
00289
00290
00291
00292
00293 inline int plint_hsh_lt(plint_hsh_t LEFT, plint_hsh_t RIGHT);
00294 inline int plint_hsh_gt(plint_hsh_t LEFT, plint_hsh_t RIGHT);
00295 inline int plint_hsh_lte(plint_hsh_t LEFT, plint_hsh_t RIGHT);
00296 inline int plint_hsh_gte(plint_hsh_t LEFT, plint_hsh_t RIGHT);
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306 int plint_val_equ(plint_ptr_t LEFT, plint_ptr_t RIGHT);
00307 int plint_val_neq(plint_ptr_t LEFT, plint_ptr_t RIGHT);
00308 int plint_val_lt(plint_ptr_t LEFT, plint_ptr_t RIGHT);
00309 int plint_val_gt(plint_ptr_t LEFT, plint_ptr_t RIGHT);
00310 int plint_val_lte(plint_ptr_t LEFT, plint_ptr_t RIGHT);
00311 int plint_val_gte(plint_ptr_t LEFT, plint_ptr_t RIGHT);
00312
00313
00314 __END_DECLS
00315
00318 #endif