Main Page   Modules   Alphabetical List   Data Structures   File List   Data Fields   Globals  

op.h

Go to the documentation of this file.
00001  /*
00002   * plint/data/op.c : operations, convertions, comparison, functions (header)
00003   * 
00004   * Time-stamp: <2002-12-21 14:32:14 gseba>
00005   * 
00006   * Copyright (C) Sebastian Glita, email: gseba@users.sourceforge.net
00007   * 
00008   * This file is part of plint.
00009   * 
00010   * plint is free software; you can  redistribute it and/or modify it under the
00011   * terms of the  GNU General Public License as published  by the Free Software
00012   * Foundation; either version 2, or (at your option) any later version.
00013   *
00014   * plint  is distributed  in the  hope  that it  will be  useful, but  WITHOUT
00015   * ANY  WARRANTY; without  even  the implied  warranty  of MERCHANTABILITY  or
00016   * FITNESS FOR A  PARTICULAR PURPOSE.  See the GNU  General Public License for
00017   * more details.
00018   * 
00019   * You should  have received a  copy of the  GNU General Public  License along
00020   * with  plint; see  the file  COPYING.  If  not, write  to the  Free Software
00021   * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA USA.
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 /* NUMERIC SECTION */
00046 
00047 
00048 /*
00049  * basic operations
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  * arithmetic operations
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  * logical operations
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  * comparison operations
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 /* POINT SECTION */
00098 
00099 
00100 /*
00101  * "arithmetic" operations
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  * comparison operators
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  * mixt arithmetic with numbers
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 /* 2 POINTS SECTION */
00135 
00136 
00137 /*
00138  * "arithmetic" operations
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  * geometrical operations
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  * comparison operators
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  * mixt arithmetic with numbers
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  * mixt arithmetic with points
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  * mixt comparison with points
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 /* STRING SECTION */
00196 
00197 /*
00198  * operators & substring
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  * comparison operators
00212  */
00213 
00214 int plint_str_inc(plint_str_t STRING1, plint_str_t STRING2, int DIRECTION);
00215 
00216 
00217 
00218 /* TABLE SECTION */
00219 
00220 /*
00221  * arithmetic operators
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  * comparison operators
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  * has and includes operator
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  * applying a function for each element with an external value
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 /* HASH SECTION */
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  * comparison operators
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  * has and includes operator
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 /* VALUE SECTION */
00301 
00302 /*
00303  * comparison operators
00304  */
00305 
00306 int plint_val_equ(plint_ptr_t LEFT, plint_ptr_t RIGHT); /* (0)1 if (non)equal as dereferenced values */
00307 int plint_val_neq(plint_ptr_t LEFT, plint_ptr_t RIGHT); /* (0)1 if (non)equal as reference values */
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

Generated on Thu Jan 9 19:02:38 2003 for plint by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002