tioga 1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Tioga_README +372 -0
- data/lgpl.txt +504 -0
- data/split/Dtable/defs.h +33 -0
- data/split/Dtable/dtable.c +1928 -0
- data/split/Dtable/dtable_intern.h +144 -0
- data/split/Dtable/dvector.h +61 -0
- data/split/Dtable/extconf.rb +4 -0
- data/split/Dtable/include/dtable.h +35 -0
- data/split/Dtable/lib/Dtable_extras.rb +90 -0
- data/split/Dtable/namespace.h +47 -0
- data/split/Dtable/safe_double.h +104 -0
- data/split/Dtable/symbols.c +92 -0
- data/split/Dtable/symbols.h +52 -0
- data/split/Dvector/defs.h +33 -0
- data/split/Dvector/dvector.c +5486 -0
- data/split/Dvector/dvector_intern.h +142 -0
- data/split/Dvector/extconf.rb +4 -0
- data/split/Dvector/include/dvector.h +61 -0
- data/split/Dvector/lib/Dvector_extras.rb +328 -0
- data/split/Dvector/lib/Numeric_extras.rb +134 -0
- data/split/Dvector/namespace.h +47 -0
- data/split/Dvector/safe_double.h +104 -0
- data/split/Dvector/symbols.c +92 -0
- data/split/Dvector/symbols.h +52 -0
- data/split/Flate/defs.h +33 -0
- data/split/Flate/extconf.rb +19 -0
- data/split/Flate/flate.c +156 -0
- data/split/Flate/flate_intern.h +97 -0
- data/split/Flate/include/flate.h +98 -0
- data/split/Flate/namespace.h +47 -0
- data/split/Flate/safe_double.h +104 -0
- data/split/Flate/symbols.c +92 -0
- data/split/Flate/symbols.h +52 -0
- data/split/Function/defs.h +33 -0
- data/split/Function/dvector.h +61 -0
- data/split/Function/extconf.rb +4 -0
- data/split/Function/function.c +988 -0
- data/split/Function/joint_qsort.c +258 -0
- data/split/Function/lib/Function_extras.rb +44 -0
- data/split/Function/namespace.h +47 -0
- data/split/Function/safe_double.h +104 -0
- data/split/Function/symbols.c +92 -0
- data/split/Function/symbols.h +52 -0
- data/split/Tioga/axes.c +774 -0
- data/split/Tioga/defs.h +33 -0
- data/split/Tioga/dtable.h +35 -0
- data/split/Tioga/dvector.h +61 -0
- data/split/Tioga/extconf.rb +4 -0
- data/split/Tioga/figures.c +672 -0
- data/split/Tioga/figures.h +855 -0
- data/split/Tioga/flate.h +98 -0
- data/split/Tioga/init.c +524 -0
- data/split/Tioga/lib/Arcs_and_Circles.rb +64 -0
- data/split/Tioga/lib/ColorConstants.rb +274 -0
- data/split/Tioga/lib/Colorbars.rb +10 -0
- data/split/Tioga/lib/Colormaps.rb +105 -0
- data/split/Tioga/lib/Coordinate_Conversions.rb +194 -0
- data/split/Tioga/lib/Creating_Paths.rb +94 -0
- data/split/Tioga/lib/Doc.rb +91 -0
- data/split/Tioga/lib/Executive.rb +515 -0
- data/split/Tioga/lib/FigMkr.rb +2224 -0
- data/split/Tioga/lib/FigureConstants.rb +125 -0
- data/split/Tioga/lib/Figures_and_Plots.rb +268 -0
- data/split/Tioga/lib/Images.rb +278 -0
- data/split/Tioga/lib/Legends.rb +190 -0
- data/split/Tioga/lib/MarkerConstants.rb +122 -0
- data/split/Tioga/lib/Markers.rb +129 -0
- data/split/Tioga/lib/Page_Frame_Bounds.rb +567 -0
- data/split/Tioga/lib/Rectangles.rb +94 -0
- data/split/Tioga/lib/Shading.rb +100 -0
- data/split/Tioga/lib/Special_Paths.rb +307 -0
- data/split/Tioga/lib/Strokes.rb +129 -0
- data/split/Tioga/lib/TeX_Text.rb +454 -0
- data/split/Tioga/lib/TexPreamble.rb +358 -0
- data/split/Tioga/lib/Titles_and_Labels.rb +306 -0
- data/split/Tioga/lib/Transparency.rb +89 -0
- data/split/Tioga/lib/Using_Paths.rb +164 -0
- data/split/Tioga/lib/Utils.rb +74 -0
- data/split/Tioga/lib/X_and_Y_Axes.rb +749 -0
- data/split/Tioga/lib/irb_tioga.rb +122 -0
- data/split/Tioga/lib/tioga.rb +1 -0
- data/split/Tioga/lib/tioga_ui.rb +5 -0
- data/split/Tioga/lib/tioga_ui_cmds.rb +793 -0
- data/split/Tioga/makers.c +989 -0
- data/split/Tioga/mk_tioga_sty.rb +53 -0
- data/split/Tioga/namespace.h +47 -0
- data/split/Tioga/pdf_font_dicts.c +18253 -0
- data/split/Tioga/pdfcolor.c +486 -0
- data/split/Tioga/pdfcoords.c +505 -0
- data/split/Tioga/pdffile.c +342 -0
- data/split/Tioga/pdfimage.c +536 -0
- data/split/Tioga/pdfpath.c +914 -0
- data/split/Tioga/pdfs.h +229 -0
- data/split/Tioga/pdftext.c +443 -0
- data/split/Tioga/safe_double.h +104 -0
- data/split/Tioga/symbols.c +92 -0
- data/split/Tioga/symbols.h +52 -0
- data/split/Tioga/texout.c +380 -0
- data/split/defs.h +33 -0
- data/split/extconf.rb +107 -0
- data/split/mkmf2.rb +1612 -0
- data/split/namespace.h +47 -0
- data/split/safe_double.h +104 -0
- data/split/scripts/tioga +4 -0
- data/split/symbols.c +92 -0
- data/split/symbols.h +52 -0
- data/tests/dtable_test.data +6 -0
- data/tests/dvector_read_test.data +1 -0
- data/tests/dvector_test.data +101 -0
- data/tests/tc_Dtable.rb +221 -0
- data/tests/tc_Dvector.rb +791 -0
- data/tests/tc_FMkr.rb +162 -0
- data/tests/tc_Flate.rb +45 -0
- data/tests/tc_Function.rb +111 -0
- data/tests/ts_Tioga.rb +38 -0
- metadata +163 -0
@@ -0,0 +1,144 @@
|
|
1
|
+
/* dtable.h */
|
2
|
+
/*
|
3
|
+
Copyright (C) 2004 Bill Paxton
|
4
|
+
|
5
|
+
This file is part of Dtable.
|
6
|
+
|
7
|
+
Dtable is free software; you can redistribute it and/or modify
|
8
|
+
it under the terms of the GNU General Library Public License as published
|
9
|
+
by the Free Software Foundation; either version 2 of the License, or
|
10
|
+
(at your option) any later version.
|
11
|
+
|
12
|
+
Dtable is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
GNU Library General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU Library General Public License
|
18
|
+
along with Dtable; if not, write to the Free Software
|
19
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
20
|
+
*/
|
21
|
+
|
22
|
+
#ifndef __dtable_H__
|
23
|
+
#define __dtable_H__
|
24
|
+
|
25
|
+
#include <namespace.h>
|
26
|
+
#include <ruby.h>
|
27
|
+
#include "dvector.h"
|
28
|
+
|
29
|
+
/*======================================================================*/
|
30
|
+
|
31
|
+
|
32
|
+
PUBLIC void Init_Dtable();
|
33
|
+
PRIVATE VALUE Read_Dtable(VALUE dest, char *filename, int skip_lines);
|
34
|
+
PRIVATE double **Dtable_Ptr(VALUE dtable, long *num_cols, long *num_rows);
|
35
|
+
|
36
|
+
PRIVATE bool Is_Dtable(VALUE obj);
|
37
|
+
|
38
|
+
PRIVATE VALUE dtable_apply_math_op(VALUE source, double (*op)(double));
|
39
|
+
PRIVATE VALUE dtable_apply_math_op2(VALUE ary1, VALUE ary2, double (*op)(double, double));
|
40
|
+
PRIVATE VALUE dtable_apply_math_op_bang(VALUE ary, double (*op)(double));
|
41
|
+
PRIVATE VALUE dtable_apply_math_op2_bang(VALUE ary1, VALUE ary2, double (*op)(double, double));
|
42
|
+
|
43
|
+
PRIVATE VALUE dtable_dup(VALUE ary);
|
44
|
+
PRIVATE VALUE dtable_transpose(VALUE ary);
|
45
|
+
PRIVATE VALUE dtable_reverse_rows(VALUE ary);
|
46
|
+
PRIVATE VALUE dtable_reverse_cols(VALUE ary);
|
47
|
+
PRIVATE VALUE dtable_rotate_cw90(VALUE ary);
|
48
|
+
PRIVATE VALUE dtable_rotate_ccw90(VALUE ary);
|
49
|
+
PRIVATE VALUE dtable_num_cols(VALUE ary);
|
50
|
+
PRIVATE VALUE dtable_num_rows(VALUE ary);
|
51
|
+
PRIVATE VALUE dtable_min(VALUE ary);
|
52
|
+
PRIVATE VALUE dtable_max(VALUE ary);
|
53
|
+
PRIVATE VALUE dtable_minmax(VALUE ary);
|
54
|
+
PRIVATE VALUE dtable_row(VALUE ary, VALUE row_num);
|
55
|
+
PRIVATE VALUE dtable_column(VALUE ary, VALUE column_num);
|
56
|
+
PRIVATE VALUE dtable_set_row(VALUE ary, VALUE row_num, VALUE dvec);
|
57
|
+
PRIVATE VALUE dtable_set_column(VALUE ary, VALUE col_num, VALUE dvec);
|
58
|
+
PRIVATE VALUE dtable_clear(VALUE ary, VALUE val);
|
59
|
+
PRIVATE VALUE dtable_set(VALUE ary, VALUE val);
|
60
|
+
PRIVATE VALUE dtable_neg(VALUE ary);
|
61
|
+
PRIVATE VALUE dtable_abs(VALUE ary);
|
62
|
+
PRIVATE VALUE dtable_sin(VALUE ary);
|
63
|
+
PRIVATE VALUE dtable_cos(VALUE ary);
|
64
|
+
PRIVATE VALUE dtable_tan(VALUE ary);
|
65
|
+
PRIVATE VALUE dtable_asin(VALUE ary);
|
66
|
+
PRIVATE VALUE dtable_acos(VALUE ary);
|
67
|
+
PRIVATE VALUE dtable_atan(VALUE ary);
|
68
|
+
PRIVATE VALUE dtable_sinh(VALUE ary);
|
69
|
+
PRIVATE VALUE dtable_cosh(VALUE ary);
|
70
|
+
PRIVATE VALUE dtable_tanh(VALUE ary);
|
71
|
+
PRIVATE VALUE dtable_asinh(VALUE ary);
|
72
|
+
PRIVATE VALUE dtable_acosh(VALUE ary);
|
73
|
+
PRIVATE VALUE dtable_atanh(VALUE ary);
|
74
|
+
PRIVATE VALUE dtable_ceil(VALUE ary);
|
75
|
+
PRIVATE VALUE dtable_floor(VALUE ary);
|
76
|
+
PRIVATE VALUE dtable_round(VALUE ary);
|
77
|
+
PRIVATE VALUE dtable_exp(VALUE ary);
|
78
|
+
PRIVATE VALUE dtable_exp10(VALUE ary);
|
79
|
+
PRIVATE VALUE dtable_log(VALUE ary);
|
80
|
+
PRIVATE VALUE dtable_log10(VALUE ary);
|
81
|
+
PRIVATE VALUE dtable_inv(VALUE ary);
|
82
|
+
PRIVATE VALUE dtable_sqrt(VALUE ary);
|
83
|
+
PRIVATE VALUE dtable_neg_bang(VALUE ary);
|
84
|
+
PRIVATE VALUE dtable_abs_bang(VALUE ary);
|
85
|
+
PRIVATE VALUE dtable_sin_bang(VALUE ary);
|
86
|
+
PRIVATE VALUE dtable_cos_bang(VALUE ary);
|
87
|
+
PRIVATE VALUE dtable_tan_bang(VALUE ary);
|
88
|
+
PRIVATE VALUE dtable_asin_bang(VALUE ary);
|
89
|
+
PRIVATE VALUE dtable_acos_bang(VALUE ary);
|
90
|
+
PRIVATE VALUE dtable_atan_bang(VALUE ary);
|
91
|
+
PRIVATE VALUE dtable_sinh_bang(VALUE ary);
|
92
|
+
PRIVATE VALUE dtable_cosh_bang(VALUE ary);
|
93
|
+
PRIVATE VALUE dtable_tanh_bang(VALUE ary);
|
94
|
+
PRIVATE VALUE dtable_asinh_bang(VALUE ary);
|
95
|
+
PRIVATE VALUE dtable_acosh_bang(VALUE ary);
|
96
|
+
PRIVATE VALUE dtable_atanh_bang(VALUE ary);
|
97
|
+
PRIVATE VALUE dtable_ceil_bang(VALUE ary);
|
98
|
+
PRIVATE VALUE dtable_floor_bang(VALUE ary);
|
99
|
+
PRIVATE VALUE dtable_round_bang(VALUE ary);
|
100
|
+
PRIVATE VALUE dtable_exp_bang(VALUE ary);
|
101
|
+
PRIVATE VALUE dtable_exp10_bang(VALUE ary);
|
102
|
+
PRIVATE VALUE dtable_log_bang(VALUE ary);
|
103
|
+
PRIVATE VALUE dtable_log10_bang(VALUE ary);
|
104
|
+
PRIVATE VALUE dtable_inv_bang(VALUE ary);
|
105
|
+
PRIVATE VALUE dtable_sqrt_bang(VALUE ary);
|
106
|
+
PRIVATE VALUE dtable_trim(int argc, VALUE *argv, VALUE self);
|
107
|
+
PRIVATE VALUE dtable_safe_log(int argc, VALUE *argv, VALUE self);
|
108
|
+
PRIVATE VALUE dtable_safe_log10(int argc, VALUE *argv, VALUE self);
|
109
|
+
PRIVATE VALUE dtable_safe_inv(int argc, VALUE *argv, VALUE self);
|
110
|
+
PRIVATE VALUE dtable_safe_asin(VALUE ary);
|
111
|
+
PRIVATE VALUE dtable_safe_acos(VALUE ary);
|
112
|
+
PRIVATE VALUE dtable_safe_sqrt(VALUE ary);
|
113
|
+
PRIVATE VALUE dtable_atan2_bang(VALUE ary, VALUE arg);
|
114
|
+
PRIVATE VALUE dtable_modulo_bang(VALUE ary, VALUE arg);
|
115
|
+
PRIVATE VALUE dtable_remainder_bang(VALUE ary, VALUE arg);
|
116
|
+
PRIVATE VALUE dtable_trim_bang(int argc, VALUE *argv, VALUE self);
|
117
|
+
PRIVATE VALUE dtable_pow_bang(VALUE ary, VALUE arg);
|
118
|
+
PRIVATE VALUE dtable_as_exponent_of_bang(VALUE ary, VALUE arg);
|
119
|
+
PRIVATE VALUE dtable_safe_log_bang(int argc, VALUE *argv, VALUE self);
|
120
|
+
PRIVATE VALUE dtable_safe_log10_bang(int argc, VALUE *argv, VALUE self);
|
121
|
+
PRIVATE VALUE dtable_safe_inv_bang(int argc, VALUE *argv, VALUE self);
|
122
|
+
PRIVATE VALUE dtable_safe_sqrt_bang(VALUE ary);
|
123
|
+
PRIVATE VALUE dtable_safe_asin_bang(VALUE ary);
|
124
|
+
PRIVATE VALUE dtable_safe_acos_bang(VALUE ary);
|
125
|
+
PRIVATE VALUE dtable_add(VALUE ary, VALUE arg);
|
126
|
+
PRIVATE VALUE dtable_sub(VALUE ary, VALUE arg);
|
127
|
+
PRIVATE VALUE dtable_mul(VALUE ary, VALUE arg);
|
128
|
+
PRIVATE VALUE dtable_div(VALUE ary, VALUE arg);
|
129
|
+
PRIVATE VALUE dtable_mod(VALUE ary, VALUE arg);
|
130
|
+
PRIVATE VALUE dtable_remainder(VALUE ary, VALUE arg);
|
131
|
+
PRIVATE VALUE dtable_pow(VALUE ary, VALUE arg);
|
132
|
+
PRIVATE VALUE dtable_as_exponent_of(VALUE ary, VALUE arg);
|
133
|
+
PRIVATE VALUE dtable_atan2(VALUE ary, VALUE arg);
|
134
|
+
PRIVATE VALUE dtable_add_bang(VALUE ary, VALUE arg);
|
135
|
+
PRIVATE VALUE dtable_sub_bang(VALUE ary, VALUE arg);
|
136
|
+
PRIVATE VALUE dtable_mul_bang(VALUE ary, VALUE arg);
|
137
|
+
PRIVATE VALUE dtable_div_bang(VALUE ary, VALUE arg);
|
138
|
+
PRIVATE VALUE dtable_read(int argc, VALUE *argv, VALUE self);
|
139
|
+
PRIVATE VALUE dtable_at(VALUE ary, VALUE xloc, VALUE yloc);
|
140
|
+
PRIVATE VALUE dtable_aset(VALUE ary, VALUE xloc, VALUE yloc, VALUE val);
|
141
|
+
PRIVATE void dtable_store(VALUE ary, long i, long j, double v);
|
142
|
+
|
143
|
+
#endif /* __dtable_H__ */
|
144
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
/* Dvector.h */
|
2
|
+
/*
|
3
|
+
Copyright (C) 2005 Bill Paxton
|
4
|
+
|
5
|
+
Dvector is free software; you can redistribute it and/or modify
|
6
|
+
it under the terms of the GNU General Library Public License as published
|
7
|
+
by the Free Software Foundation; either version 2 of the License, or
|
8
|
+
(at your option) any later version.
|
9
|
+
|
10
|
+
Dvector is distributed in the hope that it will be useful,
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
GNU Library General Public License for more details.
|
14
|
+
|
15
|
+
You should have received a copy of the GNU Library General Public License
|
16
|
+
along with Dvector; if not, write to the Free Software
|
17
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
18
|
+
*/
|
19
|
+
|
20
|
+
#ifndef __Dvector_H__
|
21
|
+
#define __Dvector_H__
|
22
|
+
|
23
|
+
/* this file has been heavily modified by Vincent Fourmond to take care
|
24
|
+
of the 'RCR330' scheme of exporting symbols
|
25
|
+
*/
|
26
|
+
|
27
|
+
#include <symbols.h>
|
28
|
+
#include <stdbool.h>
|
29
|
+
|
30
|
+
/*======================================================================*/
|
31
|
+
|
32
|
+
/* functions for handling Dvectors: */
|
33
|
+
|
34
|
+
DECLARE_SYMBOL(double *, Dvector_Data_for_Read, (VALUE dvector, long *len_ptr));
|
35
|
+
/* returns pointer to the dvector's data (which may be shared) */
|
36
|
+
DECLARE_SYMBOL(double *, Dvector_Data_Copy, (VALUE dvector, long *len_ptr));
|
37
|
+
/* like Dvector_Data_for_Read, but returns pointer to a copy of the data */
|
38
|
+
DECLARE_SYMBOL(double *, Dvector_Data_for_Write,
|
39
|
+
(VALUE dvector, long *len_ptr));
|
40
|
+
DECLARE_SYMBOL(double *, Dvector_Data_Resize, (VALUE dvector, long new_len));
|
41
|
+
DECLARE_SYMBOL(double *, Dvector_Data_Replace,
|
42
|
+
(VALUE dvector, long len, double *data));
|
43
|
+
/* copies the data into the dvector */
|
44
|
+
DECLARE_SYMBOL(VALUE, Dvector_Create, (void));
|
45
|
+
DECLARE_SYMBOL(void, Dvector_Store_Double, (VALUE ary, long idx, double val));
|
46
|
+
/* pushes one element onto the vector */
|
47
|
+
DECLARE_SYMBOL(void, Dvector_Push_Double, (VALUE ary, double val));
|
48
|
+
|
49
|
+
/* functions for interpolation */
|
50
|
+
DECLARE_SYMBOL(double, c_dvector_spline_interpolate,
|
51
|
+
(double x, int n_pts_data, double *Xs, double *Ys,
|
52
|
+
double *Bs, double *Cs, double *Ds));
|
53
|
+
DECLARE_SYMBOL(double, c_dvector_linear_interpolate,
|
54
|
+
(int num_pts, double *xs, double *ys, double x));
|
55
|
+
DECLARE_SYMBOL(void, c_dvector_create_spline_interpolant,
|
56
|
+
(int n_pts_data, double *Xs, double *Ys,
|
57
|
+
bool start_clamped, double start_slope,
|
58
|
+
bool end_clamped, double end_slope,
|
59
|
+
double *As, double *Bs, double *Cs));
|
60
|
+
#endif /* __Dvector_H__ */
|
61
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
/* dtable.h */
|
2
|
+
/*
|
3
|
+
Copyright (C) 2004 Bill Paxton
|
4
|
+
|
5
|
+
This file is part of Dtable.
|
6
|
+
|
7
|
+
Dtable is free software; you can redistribute it and/or modify
|
8
|
+
it under the terms of the GNU General Library Public License as published
|
9
|
+
by the Free Software Foundation; either version 2 of the License, or
|
10
|
+
(at your option) any later version.
|
11
|
+
|
12
|
+
Dtable is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
GNU Library General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU Library General Public License
|
18
|
+
along with Dtable; if not, write to the Free Software
|
19
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
20
|
+
*/
|
21
|
+
|
22
|
+
#ifndef __dtable_H__
|
23
|
+
#define __dtable_H__
|
24
|
+
|
25
|
+
#include <symbols.h>
|
26
|
+
|
27
|
+
/*======================================================================*/
|
28
|
+
|
29
|
+
|
30
|
+
DECLARE_SYMBOL(VALUE, Read_Dtable,
|
31
|
+
(VALUE dest, char *filename, int skip_lines));
|
32
|
+
DECLARE_SYMBOL(double **, Dtable_Ptr,
|
33
|
+
(VALUE dtable, long *num_cols, long *num_rows));
|
34
|
+
|
35
|
+
#endif
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# pre_ddata_extras.rb
|
2
|
+
|
3
|
+
# add arithmetic operators for Float and Fixnum with Dtable
|
4
|
+
|
5
|
+
class Float
|
6
|
+
alias :pre_ddata_add :+
|
7
|
+
def +(a)
|
8
|
+
if a.class == Dobjects::Dtable
|
9
|
+
a+self
|
10
|
+
else
|
11
|
+
pre_ddata_add(a)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
alias :pre_ddata_sub :-
|
15
|
+
def -(a)
|
16
|
+
if a.class == Dobjects::Dtable
|
17
|
+
a.neg+self
|
18
|
+
else
|
19
|
+
pre_ddata_sub(a)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
alias :pre_ddata_mult :*
|
23
|
+
def *(a)
|
24
|
+
if a.class == Dobjects::Dtable
|
25
|
+
a*self
|
26
|
+
else
|
27
|
+
pre_ddata_mult(a)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
alias :pre_ddata_div :/
|
31
|
+
def /(a)
|
32
|
+
if a.class == Dobjects::Dtable
|
33
|
+
a.inv*self
|
34
|
+
else
|
35
|
+
pre_ddata_div(a)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
alias :pre_ddata_pow :**
|
39
|
+
def **(a)
|
40
|
+
if a.class == Dobjects::Dtable
|
41
|
+
a.as_exponent_of(self)
|
42
|
+
else
|
43
|
+
pre_ddata_pow(a)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class Fixnum
|
49
|
+
alias :pre_ddata_add :+
|
50
|
+
def +(a)
|
51
|
+
if a.class == Dobjects::Dtable
|
52
|
+
a+self
|
53
|
+
else
|
54
|
+
pre_ddata_add(a)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
alias :pre_ddata_sub :-
|
58
|
+
def -(a)
|
59
|
+
if a.class == Dobjects::Dtable
|
60
|
+
a.neg+self
|
61
|
+
else
|
62
|
+
pre_ddata_sub(a)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
alias :pre_ddata_mult :*
|
66
|
+
def *(a)
|
67
|
+
if a.class == Dobjects::Dtable
|
68
|
+
a*self
|
69
|
+
else
|
70
|
+
pre_ddata_mult(a)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
alias :pre_ddata_div :/
|
74
|
+
def /(a)
|
75
|
+
if a.class == Dobjects::Dtable
|
76
|
+
a.inv*self
|
77
|
+
else
|
78
|
+
pre_ddata_div(a)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
alias :pre_ddata_pow :**
|
82
|
+
def **(a)
|
83
|
+
if a.class == Dobjects::Dtable
|
84
|
+
a.as_exponent_of(self)
|
85
|
+
else
|
86
|
+
pre_ddata_pow(a)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
/* namespace.h: an attempt at rationalizing shared objects
|
2
|
+
namespace use.
|
3
|
+
|
4
|
+
Copyright (C) 2006 Vincent Fourmond
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or modify
|
7
|
+
it under the terms of the GNU General Library Public License as published
|
8
|
+
by the Free Software Foundation; either version 2 of the License, or
|
9
|
+
(at your option) any later version.
|
10
|
+
|
11
|
+
This program is distributed in the hope that it will be useful,
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
GNU Library General Public License for more details.
|
15
|
+
|
16
|
+
You should have received a copy of the GNU Library General Public License
|
17
|
+
along with this program; if not, write to the Free Software
|
18
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
*/
|
20
|
+
|
21
|
+
#ifndef _NAMESPACE_H
|
22
|
+
#define _NAMESPACE_H
|
23
|
+
|
24
|
+
/* This header file provides two OS-specific macros for the definition of
|
25
|
+
extern symbols:
|
26
|
+
|
27
|
+
* PUBLIC, which has to be used to mark objects that will be used
|
28
|
+
outside the module
|
29
|
+
|
30
|
+
* PRIVATE, for symbols which are "extern" but intern to the module
|
31
|
+
|
32
|
+
Please don't add "extern" after the PRIVATE or PUBLIC declaration
|
33
|
+
as this would break compilation on Darwin.
|
34
|
+
*/
|
35
|
+
|
36
|
+
#ifdef __APPLE__
|
37
|
+
# define PRIVATE __private_extern__
|
38
|
+
# define PUBLIC
|
39
|
+
#elif __GNUC__ >= 4 /* we have the visibility attribute */
|
40
|
+
# define PRIVATE __attribute__ ((visibility ("hidden")))
|
41
|
+
# define PUBLIC __attribute__ ((visibility ("default")))
|
42
|
+
#else /* not really good */
|
43
|
+
# define PRIVATE
|
44
|
+
# define PUBLIC
|
45
|
+
#endif /* __APPLE__ and __GNU_C_ >= 4*/
|
46
|
+
|
47
|
+
#endif
|
@@ -0,0 +1,104 @@
|
|
1
|
+
/**********************************************************************
|
2
|
+
|
3
|
+
safe_double.h: small abstraction for storing double without endianess
|
4
|
+
problems
|
5
|
+
|
6
|
+
Copyright (C) 2006 Vincent Fourmond
|
7
|
+
|
8
|
+
This program is free software; you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU General Library Public License as published
|
10
|
+
by the Free Software Foundation; either version 2 of the License, or
|
11
|
+
(at your option) any later version.
|
12
|
+
|
13
|
+
This program is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU Library General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU Library General Public License
|
19
|
+
along with this program; if not, write to the Free Software
|
20
|
+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
|
22
|
+
**********************************************************************/
|
23
|
+
|
24
|
+
/* This file provides two functions: store_double and get_double, which
|
25
|
+
can be used in a 'safe' way to store doubles and retrive them
|
26
|
+
in a hopefully platform-independent form. However, it just
|
27
|
+
stores it without regards to that if ieee754.h isn't found...
|
28
|
+
*/
|
29
|
+
|
30
|
+
#ifndef _DOUBLE_H
|
31
|
+
#define _DOUBLE_H
|
32
|
+
|
33
|
+
#define STORE_LOWER_BYTE(a,p) do {\
|
34
|
+
*(p++) = (a) & 0xFF; (a) >>= 8; }\
|
35
|
+
while(0)
|
36
|
+
#define STORE_UNSIGNED(a,p) for(i = 0; i < 4; i++) STORE_LOWER_BYTE(a,p);
|
37
|
+
#define GET_UNSIGNED(a,p) do { a = 0; for(i = 0; i < 4; i++) \
|
38
|
+
(a) |= *(p++) << (i * 8); } while (0)
|
39
|
+
|
40
|
+
#ifdef HAVE_IEEE754_H
|
41
|
+
#include <ieee754.h>
|
42
|
+
|
43
|
+
|
44
|
+
static inline void store_double(double a, unsigned char * p)
|
45
|
+
{
|
46
|
+
unsigned int tmp;
|
47
|
+
int i;
|
48
|
+
union ieee754_double d;
|
49
|
+
d.d = a;
|
50
|
+
/* we store it with lower bytes firts */
|
51
|
+
tmp = d.ieee.mantissa1;
|
52
|
+
STORE_UNSIGNED(tmp, p);
|
53
|
+
tmp = d.ieee.negative << 31 |
|
54
|
+
d.ieee.exponent << 20 |
|
55
|
+
d.ieee.mantissa0;
|
56
|
+
STORE_UNSIGNED(tmp, p);
|
57
|
+
}
|
58
|
+
|
59
|
+
|
60
|
+
static inline double get_double(const unsigned char * p)
|
61
|
+
{
|
62
|
+
unsigned int tmp;
|
63
|
+
int i;
|
64
|
+
union ieee754_double d;
|
65
|
+
GET_UNSIGNED(tmp, p);
|
66
|
+
d.ieee.mantissa1 = tmp;
|
67
|
+
GET_UNSIGNED(tmp, p);
|
68
|
+
d.ieee.mantissa0 = tmp & 0xFFFFF;
|
69
|
+
d.ieee.exponent = (tmp >> 20) & 0x7FF;
|
70
|
+
d.ieee.negative = (tmp >> 31) & 0x1;
|
71
|
+
return d.d;
|
72
|
+
}
|
73
|
+
|
74
|
+
#else
|
75
|
+
|
76
|
+
union basic_double{
|
77
|
+
double d;
|
78
|
+
struct {
|
79
|
+
unsigned int a:32;
|
80
|
+
unsigned int b:32;
|
81
|
+
} i;
|
82
|
+
};
|
83
|
+
|
84
|
+
static inline void store_double(double a, unsigned char * p)
|
85
|
+
{
|
86
|
+
union basic_double d;
|
87
|
+
int i;
|
88
|
+
d.d = a;
|
89
|
+
STORE_UNSIGNED(d.i.a, p);
|
90
|
+
STORE_UNSIGNED(d.i.b, p);
|
91
|
+
}
|
92
|
+
|
93
|
+
static inline double get_double(const unsigned char * p)
|
94
|
+
{
|
95
|
+
union basic_double d;
|
96
|
+
int i;
|
97
|
+
GET_UNSIGNED(d.i.a, p);
|
98
|
+
GET_UNSIGNED(d.i.b, p);
|
99
|
+
return d.d;
|
100
|
+
}
|
101
|
+
|
102
|
+
#endif /* HAVE_IEEE754_H */
|
103
|
+
|
104
|
+
#endif /* _DOUBLE_H */
|