1
# Copyright (C) 2004, 2005, 2007 John W. Eaton
3
# This file is part of Octave.
5
# Octave is free software; you can redistribute it and/or modify it
6
# under the terms of the GNU General Public License as published by the
7
# Free Software Foundation; either version 3 of the License, or (at
8
# your option) any later version.
10
# Octave is distributed in the hope that it will be useful, but WITHOUT
11
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15
# You should have received a copy of the GNU General Public License
16
# along with Octave; see the file COPYING. If not, see
17
# <http://www.gnu.org/licenses/>.
24
if (NR == 1 && make_inclusive_header)
26
print "// DO NOT EDIT -- generated by sparse-mk-ops";
27
tmp = make_inclusive_header;
28
gsub (/[\.-]/, "_", tmp);
29
printf ("#if !defined (octave_%s)\n", tmp);
30
printf ("#define octave_%s 1\n", tmp);
49
scalar_zero_val[ntypes] = $6;
50
fwd_decl_ok[ntypes] = $5 == "YES";
51
header[ntypes] = $4 == "NONE" ? "" : $4;
58
printf ("skipping line %d: %s\n", NR, $0);
60
else if (generate_ops)
70
bin_ops = index (op_type, "B") != 0;
71
cmp_ops = index (op_type, "C") != 0;
72
eqne_ops = index (op_type, "E") != 0;
73
bool_ops = index (op_type, "L") != 0;
77
lhs_conv = cmp_ops ? $(++n) : "";
78
rhs_conv = cmp_ops ? $(++n) : "";
80
if (lhs_conv == "NONE")
83
if (rhs_conv == "NONE")
88
bool_headers[k++] = $(++n);
90
cc_file = sprintf ("%s-%s-%s.cc", prefix, lhs_tag, rhs_tag);
91
h_file = sprintf ("%s-%s-%s.h", prefix, lhs_tag, rhs_tag);
105
if (make_inclusive_header)
107
printf ("#include \"%s\"\n", h_file);
111
h_guard = sprintf ("octave_%s_%s_%s_h", prefix, lhs_tag, rhs_tag);
113
result_num_1 = rev_tag[result_tag_1];
114
result_num_2 = rev_tag[result_tag_2];
115
lhs_num = rev_tag[lhs_tag];
116
rhs_num = rev_tag[rhs_tag];
118
result_type_1 = type[result_num_1];
119
result_type_2 = type[result_num_2];
120
lhs_type = type[lhs_num];
121
rhs_type = type[rhs_num];
123
result_scalar_zero_val_1 = scalar_zero_val[result_num_1];
124
result_scalar_zero_val_2 = scalar_zero_val[result_num_2];
125
lhs_scalar_zero_val = scalar_zero_val[lhs_num];
126
rhs_scalar_zero_val = scalar_zero_val[rhs_num];
128
result_header_1 = header[result_num_1];
129
result_header_2 = header[result_num_2];
130
lhs_header = header[lhs_num];
131
rhs_header = header[rhs_num];
133
lhs_class = class[lhs_num];
134
rhs_class = class[rhs_num];
136
print "// DO NOT EDIT -- generated by sparse-mk-ops" > h_file;
138
printf ("#if !defined (%s)\n", h_guard) >> h_file;
139
printf ("#define %s 1\n", h_guard) >> h_file;
143
if (result_fwd_decl_ok)
144
printf ("class %s\n", result_type_1) >> h_file;
146
printf ("#include \"%s\"\n", result_header_1) >> h_file;
149
if (result_header_2 && ! (result_header_2 == result_header_1))
151
if (result_fwd_decl_ok)
152
printf ("class %s\n", result_type_2) >> h_file;
154
printf ("#include \"%s\"\n", result_header_2) >> h_file;
157
if (lhs_header && ! (lhs_header == result_header_1 || lhs_header == result_header_2))
159
if (result_fwd_decl_ok)
160
printf ("class %s\n", lhs_type) >> h_file;
162
printf ("#include \"%s\"\n", lhs_header) >> h_file;
165
if (rhs_header && ! (rhs_header == lhs_header || rhs_header == result_header_1 || rhs_header == result_header_2))
167
if (result_fwd_decl_ok)
168
printf ("class %s\n", rhs_type) >> h_file;
170
printf ("#include \"%s\"\n", rhs_header) >> h_file;
173
printf ("#include \"Sparse-op-defs.h\"\n") >> h_file;
176
printf ("SPARSE_%s%s_BIN_OP_DECLS (%s, %s, %s, %s, OCTAVE_API)\n", lhs_class,
177
rhs_class, result_type_1, result_type_2, lhs_type,
181
printf ("SPARSE_%s%s_CMP_OP_DECLS (%s, %s, OCTAVE_API)\n", lhs_class,
182
rhs_class, lhs_type, rhs_type) >> h_file
185
printf ("SPARSE_%s%s_EQNE_OP_DECLS (%s, %s, OCTAVE_API)\n", lhs_class,
186
rhs_class, lhs_type, rhs_type) >> h_file
189
printf ("SPARSE_%s%s_BOOL_OP_DECLS (%s, %s, OCTAVE_API)\n", lhs_class,
190
rhs_class, lhs_type, rhs_type) >> h_file
193
print "#endif" >> h_file;
198
print "// DO NOT EDIT -- generated by sparse-mk-ops" > cc_file;
200
## print "#ifdef HAVE_CONFIG_H" >> cc_file;
201
print "#include <config.h>" >> cc_file;
202
## print "#endif" >> cc_file;
204
print "#include \"Array-util.h\"" >> cc_file;
205
print "#include \"quit.h\"" >> cc_file;
207
printf ("#include \"%s\"\n", h_file) >> cc_file;
209
for (i in bool_headers)
211
printf ("#include \"%s\"\n", bool_headers[i]) >> cc_file;
212
delete bool_headers[i];
216
printf ("#include \"%s\"\n", result_header_1) >> cc_file;
218
if (result_header_2 && ! (result_header_2 == result_header_1))
219
printf ("#include \"%s\"\n", result_header_2) >> cc_file;
221
if (lhs_header && ! (lhs_header == result_header_1 || lhs_header == result_header_2))
222
printf ("#include \"%s\"\n", lhs_header) >> cc_file;
224
if (rhs_header && ! (rhs_header == lhs_header || rhs_header == result_header_1 || rhs_heaer == result_header_2))
225
printf ("#include \"%s\"\n", rhs_header) >> cc_file;
228
printf ("SPARSE_%s%s_BIN_OPS (%s, %s, %s, %s)\n", lhs_class,
229
rhs_class, result_type_1, result_type_2, lhs_type,
233
printf ("SPARSE_%s%s_CMP_OPS (%s, %s, %s, %s, %s, %s)\n",
234
lhs_class, rhs_class, lhs_type, lhs_scalar_zero_val,
235
lhs_conv, rhs_type, rhs_scalar_zero_val, rhs_conv) >> cc_file
238
printf ("SPARSE_%s%s_EQNE_OPS (%s, %s, %s, %s, %s, %s)\n",
239
lhs_class, rhs_class, lhs_type, lhs_scalar_zero_val,
240
lhs_conv, rhs_type, rhs_scalar_zero_val, rhs_conv) >> cc_file
243
printf ("SPARSE_%s%s_BOOL_OPS2 (%s, %s, %s, %s)\n", lhs_class,
244
rhs_class, lhs_type, rhs_type, lhs_scalar_zero_val,
245
rhs_scalar_zero_val) >> cc_file
251
printf ("skipping line %d: %s\n", NR, $0);
255
if (make_inclusive_header)