Starting Eigen 2 development. The current plan is to use the last

release of tvmet (inactive for 2 years and developer unreachable) as the
basis for eigen2, because it provides seemingly good expression template
mechanisms, we want that, and it would take years to reinvent that
wheel. We'll see. So this commit imports the last tvmet release.
This commit is contained in:
Benoit Jacob 2007-05-30 06:24:51 +00:00
commit 3036eeca0a
244 changed files with 95342 additions and 0 deletions

1
tvmet-1.7.1/AUTHORS Normal file
View File

@ -0,0 +1 @@
Olaf Petzold <opetzold@users.sourceforge.net>

504
tvmet-1.7.1/COPYING Normal file
View File

@ -0,0 +1,504 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

4104
tvmet-1.7.1/ChangeLog Normal file

File diff suppressed because it is too large Load Diff

761
tvmet-1.7.1/ChangeLog.1 Normal file
View File

@ -0,0 +1,761 @@
2003-02-12 Olaf Petzold <opetzold@wit.regiocom.net>
* ChangeLog: this files is renamed to ChangeLog.1 and holds all old
Changes. We use the cvs ChangeLog now.
* examples/Makefile.am: example target diag added.
* examples/diag.cc: added.
* regression/TestMathOps.h: TestMathOps<T>::MatrixDiagVector() added.
* include/tvmet/MatrixFunctions.h: diag(Matrix<T, Sz, Sz>& m) added.
* include/tvmet/Matrix.h: MatrixDiagVectorReference added.
2003-02-10 opetzold <opetzold@wit.regiocom.net>
* Makefile.am (rpm): rpm package is using bz2 archive now.
* tvmet.spec.in: target tvmet-doc-xxx removed, it's inside the standard
rpm package
2003-02-09 opetzold <opetzold@wit.regiocom.net>
* version 0.8.0 released (cvs tagged)
* Makefile.am: target doc-dist added to dist-hook, as well as
moving ps/pdf manuals into distdir.
* doc/compiler.dox: HTML <li></li> environment removed to avoid
problems with latex ref manual.
* configure.in, Makefile.am: parts adapted to new syntax style of
autoconf 2.5x and automake 1.6x
* include/tvmet/util/Timer.h: rusage cpp wrapper replaced with
config.h's defined(TVMET_HAVE_XYZ_H)
* configure.in: enhanced for better recognizing, features from autoconf-2.5x
added. Some problems left using
AC_INIT(AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
* doc/Doxyfile.in (INPUT): points to @top_srcdir@/include/@PACKAGE@, therefore
we can apply other lib's includes too (e.g. for benchmark)
2003-02-08 opetzold <opetzold@wit.regiocom.net>
* config/license: removed
* version 0.7.6 released internally (cvs tagged)
* misc corrections to the cvs
* doc/bench*.png: replaced with an 'empty' picture
* doc/Makefile.am: bug fixed: tgz dist installs the docs now
* include/tvmet/Makefile.am: bug fixed: tgz dist install target doesn't
install meta and util directory; include/tvmet/meta/Makefile.am,
include/tvmet/util/Makefile.am added
* version 0.7.5 released internally (cvs tagged)
* project imported into cvs, cvs keyword Id corrected and added
* doc/Util.h: header guard prefix TVMET extended
* include/tvmet/meta/: copyright and cvs Id keyword added
2002-12-28 opetzold <opetzold@wit.regiocom.net>
* benchmark/BenchImpl.h: Each BenchImpl does run 10 times each benchmark to
trick the optimizer a little bit.
2002-12-27 opetzold <opetzold@wit.regiocom.net>
* benchmark/Makefile.am: each benchmark got his own optimizer cxxflags.
2002-12-22 opetzold <opetzold@wit.regiocom.net>
* version 0.7.4 released internally
* include/tvmet/MatrixFunctions.h: element_wise::product(Matrix, Matrix)
added.
* benchmark/benchmark.m: stl and peak benchmark added
* benchmark/stl.{cc|h}: created to measure STL performance
* benchmark/peak.{cc|h}: created to measure peak performance
* benchmark/Interface.h: interface_peak etc. added
* benchmark/BenchmarkBase.h: created, moved basic functionality from
Benchmark.h
2002-12-21 opetzold <opetzold@wit.regiocom.net>
* benchmark/BenchInfo.h: created, class definition moved from
Benchmark.h into.
2002-12-17 opetzold <opetzold@wit.regiocom.net>
* version 0.7.3 released internally
* doc/benchmark.dox: Result comments to each benchmark removed.
* doc/ doxygen extension is dox now to avoid confusion.
* include/tvmet/util/General.h: all functions inside doxygroup
_util_function now.
* benchmark/Makefile.am: Depencies corrected.
2002-12-16 opetzold <opetzold@wit.regiocom.net>
* benchmark/Benchmark.h (class BenchInfo): typeid added
* benchmark/*.cc: axpy included in benchmark
* benchmark/BenchImpl.h (BenchImpl::vector_inner_product): result z static
now to avoid removing by optimizer of gcc-3.2, thanks to Jörg Walter.
* benchmark/Benchmark.h (class Benchmark): BUG inside set_complexity(),
vector_add(), vector_outer_product() removed, thanks to Jörg Walter.
2002-12-15 opetzold <opetzold@wit.regiocom.net>
* include/tvmet/XprMatrixOperators.h: element_wise
operator*(XprMatrix, XprMatrix) supports non-square matrizes now.
* bechmark/*: (C) added
* include/tvmet/XprOperators.h: IMPLEMENT macros splitted for
XprVector<> and XprMatrix<>, NS element_wise introduced,
file splited into Xpr{Matrix, Vector}Operators.h
2002-12-14 opetzold <opetzold@wit.regiocom.net>
* version 0.7.2 released internally; interface has changed too!
* include/tvmet/MatrixImpl.h (Matrix::print_on): small BUG removed,
introduced from v0.4.2 (last comma separator was wrong)
* doc/operator_tab.html: added as doc for namespace element_wise
* regressions/*: adapted to namespace element_wise
* include/tvmet/tvmet.h: doxygen namespace description moved from
doc/misc.doc into this header.
* include/tvmet/MatrixOperators.h: operators for *=, /= ... <<= for
Matrix<> and XprMatrix<> inside namespace element_wise now!
Macro KICK_MATH_SENSE absolete now!
* include/tvmet/MatrixImpl.h: operator impl for +=, -= ... <<= for
Matrix<> and XprMatrix<> moved here from Matrix.h.
* include/tvmet/MatrixImpl.h: Forgotten macro prefix TVMET_ added.
operator %=,^=,&=,|= have as argument std::size_t since these
are bitops, only int's are allowed/usefull.
* include/tvmet/Matrix.h (class Matrix): operator %=,^=,&=,|= have
as argumeent std::size_t since these are bitops, only int's
are allowed/usefull.
* include/tvmet/VectorOperators.h: operators for /=, %= ... <<= for
Vector<> and XprVector<> inside namespace element_wise now!
Macro KICK_MATH_SENSE absolete now!
* include/tvmet/VectorImpl.h: operator impl for +=, -= ... <<= for
Vector<> and XprVector<> moved here from Vector.h.
* include/tvmet/Vector.h (class Vector): member operators for
+=, -= ... <<= for Vector<> and XprVector<> named to equivalent
functions.
* doc/faq.doc: comma_initializer and assign_op compiler error section
added.
* include/tvmet/VectorImpl.h: Forgotten macro prefix TVMET_ added.
* version 0.7.1 released internally
2002-12-10 opetzold <opetzold@wit.regiocom.net>
* doc/notes.doc: notes about aliasing added.
* doc/benchmark.doc: Fomula written for benchmarks, notes abot aliasing.
* benchmark/ublas.h: assumes alias free ops, thanks to Jörg Walter
2002-12-08 opetzold <opetzold@wit.regiocom.net>
* include/tvmet/MatrixOperators.h: operator*(XprMatrix, Matrix|Matrix, XprMatrix)
moved from NS tvmet::element_wise to tvmet,
operator/(XprMatrix, Matrix|Matrix, XprMatrix) moved from NS
tvmet to tvmet::element_wise. M = transpose(M1) * M2 is working now.
* include/tvmet/meta/Gemv.h: doxygen class docs corrected.
* regression/TestMathOps.h: productTranspose regression Test added
* include/tvmet/MatrixFunctions.h: Formula written in doxygen docs for
productTransposed(M,x)
2002-11-30 opetzold <opetzold@wit.regiocom.net>
* version 0.7.0 released
* include/tvmet/{Matrix,Vector}.h: Reference level printing changed.
2002-11-26 opetzold <opetzold@wit.regiocom.net>
* include/tvmet/{Xpr,BinaryFunctionals,UnaryFunctionals,Matrix,Vector}.h:
expression printing enhanced.
* include/tvmet/VectorOperators.h: Vector<std::complex<T>, Sz> and std::complex<T>,
std::complex<T> and Vector<std::complex<T>, Sz> are working now.
* include/tvmet/MatrixOperators.h: Matrix<T, Rows, Cols> and complex<T>,
complex<T> and Matrix<T, Rows, Cols> are working now.
2002-11-24 opetzold <opetzold@wit.regiocom.net>
* regression/TestSTL.h: added for regression with STL's vector class.
* include/tvmet/Vector.h (class Vector): runtime condition added for
construction from given iterator.
* regression/*: TVMET prefix for all *.h
* version 0.6.3 released internally
* regression/Makefile.am: CXXFLAGS limited to the minimum optimizations
* regression/TestMathOps.h: adapted to the new situation.
* regression/MVOps.h: moved to namespace util, file moved to
include/tvmet/util/General.h; functions renamed
* include/tvmet/Timer.h: moved to util subdir.
* include/tvmet/*: All meta stuff moved to an own namespace into a
subdirectoy meta.
* include/tvmet/Matrix.h (class Matrix::assign): adapted for use of meta
templates default parameter
* include/tvmet/MetaMatrix.h (class Matrix): {Row,Col}Stride have default
parameter now.
* doc/Makefile.am: CXXFLAGS limited to the minimum optimizations
2002-11-23 opetzold |opetzold@wit.regiocom.net>
* version 0.6.2 released internally
* doc/benchmark.doc: updated.
* benchmark/* completly rewritten, uses interfaces for libaries (blitz,
ublas, mtl), results in MFlops now.
2002-11-16 opetzold <opetzold@wit.regiocom.net>
* benchmark/Timer.h (class Timer): moved to namespace tvmet::util, file
moved to include/tvmet
2002-11-14 opetzold <opetzold@wit.regiocom.net>
* version 0.6.1 released internally
* doc/{notes,faq}.doc: About regression test moved from notes to
faq. Added to faq dimension check error compiler.
* doc/*: Benchmark results added.
* regression/TestMathOps.h (TestMathOps<T>::MatrixOps()): Regression
for trace(Matrix<>) added.
* include/tvmet/MatrixFunctions.h: trace(Matrix<>) added.
* include/tvmet/Matrix.h (class MetaMatrix): MetaMatrix::trace added.
2002-11-13 opetzold <opetzold@wit.regiocom.net>
* include/tvmet/*.h: brute force replace DECLARE_XYZ with TVMET prefix
to avoid complications with other macros.
Same to asXpr() -> as_expr() to hold member conventions.
* include/tvmet/*.h: brute force replace ExprType with expr_type to be
conform to the used style.
2002-11-12 opetzold <opetzold@wit.regiocom.net>
* regression/MVOps.h: Header guard with TVMET prefix, doxygen like,
VVAdd fn added.
2002-11-10 opetzold <opetzold@wit.regiocom.net>
* regression/*: completly rewritten. Now we have a benchmark with blitz++,
tvmet, ublas and conventional implementation.
* doc/*: Corrections and Enhancements to the docs generally (intro rewritten).
* include/tvmet/tvmet.h: Guard for defined DEBUG arround TVMET_DEBUG removed.
TVMET_DEBUG isn't turned on at defined DEBUG any more.
2002-11-03 opetzold <opetzold@wit.regiocom.net>
* version 0.6.0 released
* regression/TestMathOps.h: Test for normalize(Vector<>) added.
* include/tvmet/{Matrix,Vector}Operators.h: Matrix/Vector<T, Sz> and POD's
extended with long long int to handle long long from NumericTraits
too.
2002-10-29 opetzold <opetzold@wit.regiocom.net>
* doc/{usage,faq}.doc enhanced.
* include/tvmet/VectorFunctions.h: normalize(Vector<>) added.
* regression/TestUnFunc.h: copy && paste devel killed:
3 test cases indicate that they are testing the inverse functions,
asin, acos, atan but the test case calls the sin function - thanks
to Darin DeForest (deforest) from sf.
2002-10-19 opetzold <opetzold@wit.regiocom.net>
* include/tvmet/{Matrix|Vector}Functions.h: Formula docs enhanced,
doxy grouping enhanced for unary and binary functions and
operators.
2002-10-17 opetzold <opetzold@wit.regiocom.net>
* version 0.5.1 released as doc update
* doc/Doxygen.in: PREDEFINED targets use the forgotten TVMET prefix too.
* include/tvmet/{Binary|UnaryFunctionals.h, NumericTraits.h,
TypePromotion.h TvmetBase.h}: macros
generated operators, functions and functionals doc added for
doxygen include path.
2002-10-10 opetzold <opetzold@wit.regiocom.net>
* doc/{functions|operators}_doc.cc: naming convention for private
data updated
* doc/*: Corrections and Enhancements to the docs generally.
2002-08-18 opetzold <opetzold@wit.regiocom.net>
* version 0.5.o released after some time of playing with.
* doc/tvmet.css: using tvmet.css now.
* Small docs enhancements.
2002-08-03 opetzold <opetzold@wit.regiocom.net>
* include/tvmet/VectorImpl.h (print_on): simplifyied rewritten.
* include/tvmet/MatrixImpl.h (print_on): simplifyied rewritten.
* version 0.4.2 released only internal
* doc/compiler.doc: Section general compiler requirements added.
* include/tvmet/*.h: forwards for namespace std rewritten to avoid
doxygen confuse.
* regression/TestMathOps.h: Regression test for row() and col() added.
* include/tvmet/Matrix.h (Matrix{Row, Col}VectorReference):
operator[] const added, manual ctor removed.
* include/tvmet/Matrix.h (Matrix{Row, Col}VectorReference): XprLevel is
IndentLevl now (removed bug from beginning time.)
* examples/mv.cc: cstdlib for rand added for compatibility.
2002-07-27 opetzold <opetzold@wit.regiocom.net>
* version 0.4.1 released only internal
* regression/Makefile.am (regression_LDADD): cppunit-1.9.8 needs -ldl for
dl{open,close,sym}.
* include/tvmet/Matrix.h (class Matrix): added reverse_iterator STL
interface as well as empty() and max_size(). size() is static now.
* include/tvmet/Vector.h (class Vector): added reverse_iterator STL
interface as well as front(), back(), empty(), max_size().
size() is static now.
* tvmet.spec.in: Adapted for manual.
* Makefile.am (man_MANS): manual for tvmet-config written
* include/tvmet/*: brute force query replace printOn with print_on
for member naming conformity.
* include/tvmet/*: brute force query replace restrict by _tvmet_restrict
due to the use of the prefix macro.
* include/tvmet/* all header guards with TVMET_ prefix extensioned.
* doc/Doxyfile.in: adapted to the new situation
* tvmet-config.in (Usage): corrected very old package name (tvm)
* include/tvmet/config/config-{icc,kcc,pgi}.h: dummies created for
compiler specifics.
* include/tvmet/config/config-gcc.h: created for gcc specifics.
* include/tvmet/TvmetBase.h: created, contents of old tvmet.h moved in.
* include/tvmet/tvmet.h (IndentLevel): forgotten member rename to be
conform to m_xxx; particular rewritten and splitted, so below
and above.
* configure.in: We are using the ac_create_prefix_config_h to create
a prefixed config.h header now. Unfortunally accconfig.h is
deprecated too. With this we can easy mix different packages
(prior all autoXXX defined PACKAGE and VERSION with the result
of multiple define warnings).
* Makefile.am (m4sources): added ac_create_prefix_config_h.m4, aclocal.m4
moved from root dir to config dir.
2002-07-24 opetzold <opetzold@wit.regiocom.net>
* include/tvmet/VectorImpl.h: printOn() does care the io manipulators
std::setw(), see examples/mv.cc
* include/tvmet/MatrixImpl.h: same too.
2002-07-23 opetzold <opetzold@wit.regiocom.net>
* version 0.4.0 released
* include/tvmet/NumericTraits.h: rewritten to avoid macro and ifdef garbage.
* include/tvmet/*: member rename to be conform to m_xxx
* include/tvmet/Matrix.h: CT_CONDITION have the tvmet identifier now.
* include/tvmet/Vector.h: CT_CONDITION have the tvmet identifier now.
2002-07-17 opetzold <opetzold@wit.regiocom.net>
* now we have a postscript and pdf manual
* doc/functions_doc.cc: some missed return statements added.
2002-07-16 opetzold <opetzold@wit.regiocom.net>
* doc/Makefile.am: pdf support improved.
* doc/Makefile.am (doc-dist): tvmet-doc-xxx dist doesn't have html subdir anymore
- usefull for sourceforge dist since we have only html docs.
* regression/main.cc (main): args removed to avoid warnings.
* configure.in: CXX_OPTIMIZE_FLAG/CXX_DEBUG_FLAGS for GnuCC -W -Wall added
* include/tvmet/TypePromotion.h: No idea when this bug where introduced - the
header guard was in wrong scope, v0.3.1 suffered. Nobdy told me ...
* include/tvmet/TypePromotion.h: Support for long long. Enhanced for unsigned
and complex types as well. Change ranking breaks compatibility
with prior releases.
* include/tvmet/NumericTraits.h: support for long long. Specialized version for
long double and long long self removed - there isn't a way to guarantee
the precision than.
* config/ac_c_long_long.m4 added.
2002-07-13 opetzold <opetzold@wit.regiocom.net>
* acconfig.h: political correct error messages now 8-)
2002-07-07 opetzold <opetzold@wit.regiocom.net>
* version 0.3.1 released
* include/tvmet/Vector.h (class Vector): brute force query replace ThisType
by this_type, to be conform to the naming convention
* include/tvmet/Matrix.h (class Matrix): brute force query replace ThisType
by this_type, to be conform to the naming convention
* doc/Doxyfile.in: slighly minor changes.
2002-07-06 opetzold <opetzold@wit.regiocom.net>
* include/tvmet/Matrix.h (class Matrix): same here.
* include/tvmet/Vector.h (class Vector): doxygen correctness for copy ctor doc.
2002-06-25 opetzold <opetzold@wit.regiocom.net>
* doc/notes.doc: chapter _thread inside contents now.
* include/tvmet/TypePromotion.h: classes inside namespace tvmet now.
2002-06-23 opetzold <opetzold@wit.regiocom.net>
* version 0.3.0 released
* doc-dists does have a doxygen tag file now
* header class descriptions follows now the statement
\class <name> [<header-file>] [<header-name>]
* include/tvmet/CompileTimeError.h, include/tvmet/CommaInitializer.h: doxygen
confuseness removed (first line of header (LGPL) introduced a doxy comment - therfore
doxygen did interpret the follwing statement)
2002-06-22 opetzold <opetzold@wit.regiocom.net>
* include/tvmet/Functional.h: class replaced by struct, since all members are public
* include/tvmet/XprOperators.h: std::complex<T> templated
* include/tvmet/XprFunctions.h: std::complex<T> templated
* include/tvmet/VectorOperators.h: std::complex<T> templated
* include/tvmet/VectorFunctions.h: std::complex<T> templated
* include/tvmet/VectorEval.h: std::complex<T> templated, macro removed
* include/tvmet/UnaryFunctionals.h: std::complex<T> templated
* include/tvmet/MatrixFunctions.h: std::complex<T> templated
* include/tvmet/MatrixOperators.h: std::complex<T> templated
* include/tvmet/MatrixEval.h: std::complex<T> templated, macro removed
* include/tvmet/XprFunctions.h: forgotten exp function added
* regression/TestMathOps.h: bug removed in regressions due to prior initialized
vars. Moved the test into MatrixMatrixVector.
* benchmark/Benchmark.h: new, parts from m1.cc and v1.cc has been moved here.
2002-06-20 opetzold <opetzold@wit.regiocom.net>
* include/tvmet/TypePromotion.h: std::complex<int> added, therfore the priorities
for all complex types have changed!
* include/tvmet/NumericTraits.h: depends on HAVE_LONG_DOUBLE, sum_type of double
is long double or double.
* include/tvmet/{MatrixEval.h, MatrixFunctions.h, MatrixOperators.h, NumericTraits.h,
TypePromotion.h, UnaryFunctionals.h, VectorEval.h, VectorFunctions.h,
VectorOperators.h, XprFunctions.h, XprOperators.h} HAVE_LONG_DOUBLE
encapsulated.
* configure.in: AC_C_LONG_DOUBLE added.
* include/tvmet/UnaryFunctionals.h: for std::complex<> expanded, uses now a const reference.
functions for std::complex<int> added
* include/tvmet/MatrixEval.h: std::complex<int> added
* doc/Doxyfile.in (BIN_ABSPATH): updated for doxygen 2.2.18 (new generated).
2002-06-16 opetzold <opetzold@wit.regiocom.net>
* examples/Makefile.am (examples): bug corrected.
* include/tvmet/NumericTraits.h: complex<int> numeric traits added.
* include/tvmet/MatrixOperators.h: operator*() is in namespace element_wise left
2002-06-13 opetzold <opetzold@wit.regiocom.net>
* doc/Makefile.am (doc-dist): gzip with bzip2 replaced
* Makefile.am (doc-dist): gzip to bzip2 replaced as well
* include/tvmet/MatrixFunctions.h: for std::complex<> expanded, uses now a const reference.
functions for std::complex<int> added
2002-06-12 opetzold <opetzold@wit.regiocom.net>
* include/tvmet/XprFunctions.h: for std::complex<> expanded, uses now a const reference.
functions for std::complex<int> added
* include/tvmet/MatrixOperators.h (DECLARE_BINARY_OPERATOR): for std::complex<>
expanded, uses now a const reference.
operators for std::complex<int> added
* include/tvmet/VectorOperators.h (DECLARE_BINARY_OPERATOR): for std::complex<>
expanded, uses now a const reference.
operators for std::complex<int> added
* include/tvmet/XprOperators.h (DECLARE_BINARY_OPERATOR): for std::complex<>
expanded, uses now a const reference.
logical operators for float, double etc. removed, since isn't applicable
operators for std::complex<int> added
2002-06-11 opetzold <opetzold@wit.regiocom.net>
* acconfig.h (__S_STL_INTERNAL_RELOPS): hack removed since isn't usefull.
* doc/Makefile.am (api): target renamed to doc
* include/tvmet/tvmet.h: NS_TVMET_BEGIN/END removed again due to doxygen problems
description of namespace moved to misc.doc
* doc/Doxyfile.in (INPUT): @top_srcdir@/include/tvmet now
* include/tvmet/tvmet.h: macros NS_TVMET_BEGIN/END completly removed - too
much trouble with doxygen, only NS_TVMET_NAME is used now. NS_TVMET_NAME
has a guard now.
* include/tvmet/*.h: doxygen grouping for global functions and operators
* doc/functions.doc: added for global functions documenting
* doc/operators.doc: added for global operators documenting
2002-06-09 opetzold <opetzold@wit.regiocom.net>
* version 0.2.1 released
* benchmark/* completly rewritten
* regression/MVOps.h: extracted from TestMathOp.h for use for benchmarking
2002-06-08 opetzold <opetzold@wit.regiocom.net>
* regression/: checked/rewritten and updated against cppunit-1.8.0,
which s now used for regression test.0
TestConstruction.cc TestMathOps.cc TestXpr.cc removed.
* regression/main.cc: Oops, non std iostream include header fixed. Thanks
to gcc-3.1 8-)
* include/tvmet/*.h: doxygen enhancements
* doc/Makefile.am: modified for splitted doc files, ChangeLog and THANKS files
included into html doc tree.
* doc/intro.doc: original intro.doxy splitted to several *.doc files,
anhanced docs and topics regrouped.
* include/tvmet/Matrix.h (class Matrix): Member assignValue(), forgotten return
statement added. Thanks to Kresimir Fresl <fresl@grad.hr>
2002-06-02 opetzold <opetzold@wit.regiocom.net>
* version 0.2.0 released
* include/tvmet/Matrix.h (class Matrix): STL iterator constructors and interface
added.
* include/tvmet/Vector.h (class Vector): STL iterator constructors and interface
added.
* generell: Designer decision to rename all const_reference to ConstReference,
reference to Reference, expr_type to ExprType. This make its possible
to support the STL interface. Finally this means a public interface
change.
* include/tvmet/MatrixFunctions.h (class MetaMM ): typename
PromoteTraits<T1, T2>::value_type' is implicitly a typename,
changed, (class MetaMV ): same here.
* include/tvmet/: brute-force query-replace size_t with std::size_t
* doc/intro.doxy: slightly changed and anhanced docs due to positive
test with stlport and gcc-3.1.
* include/tvmet/UnaryFunctionals.h: removed ieee math functions
from namespace std, STLport does it right.
2002-06-01 opetzold <opetzold@wit.regiocom.net>
* cleaned some comments/doxygen tags for cosmetic
* removed doing vector cross product as ET from todo list
* include/tvmet/Vector.h (class Vector): enum size removed, since it's never used
here and not really usefull. Added new member function size() instead.
* include/tvmet/Matrix.h (class Matrix): enum { rows, cols} removed since they are
never used here, and not really usefull. Added new member functions
rows() and cols() instead.
* include/tvmet/Vector.h (class Vector): template argument length replaced
with tvmet::Vector template argument Sz, since it's the same.
Removed enum length, since isn't needed.
* Makefile.am (rpm): --target=noarch added, therefore it's really
plattform independed 8)
2002-04-27 opetzold <opetzold@wit.regiocom.net>
* version 0.1.2 released
* include/tvmet/tvmet.h (NS_TVMET): removed since it holds only the name self and
isn't used anwhere expect NS_TVMET_BEGIN.
* doc/header.html: meta tags added and sf logo changed.
2002-04-21 opetzold <opetzold@wit.regiocom.net>
* docs/ adhanced
* include/tvmet/Matrix.h (MatrixReference::operator()): removed const since
it isn't const.
2002-04-20 opetzold <opetzold@wit.regiocom.net>
* include/tvmet/Matrix.h: MatrixColVectorReference, MatrixRowVectorReference added.
* include/tvmet/MatrixFunctions.h: row() and col() functions added
* examples/: new complex examples
* macro for automake added tvmet.m4
2002-03-11 O.Petzold <opetzold@wit.regiocom.net>
* version 0.1.1 released
2002-03-05 O.Petzold <opetzold@wit.regiocom.net>
* examples/: some examples added for xpr printing and simple mv, mm ops
* include/tvmet/Vector.h (VectorReference, VectorConstReference): XprLevel
printing uses typeid now.
* include/tvmet/Matrix.h (MatrixReference, MatrixConstReference): XprLevel
printing uses typeid now.
* include/tvmet/VectorImpl.h (operator<<()): XprLevel printing uses typeid now.
* include/tvmet/MatrixImpl.h (operator<<()): XprLevel printing uses typeid now.
2002-03-04 O.Petzold <opetzold@wit.regiocom.net>
* include/tvmet/MatrixFunctions.h: min/max temp vars improved
* include/tvmet/VectorFunctions.h: min/max temp vars improved
* doc/intro.doxy: corrections
2002-03-01 O.Petzold <opetzold@wit.regiocom.net>
* version 0.1.0 released

229
tvmet-1.7.1/INSTALL Normal file
View File

@ -0,0 +1,229 @@
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. (Caching is
disabled by default to prevent problems with accidental use of stale
cache files.)
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You only need
`configure.ac' if you want to change it or regenerate `configure' using
a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. Run `./configure --help'
for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a
time in the source code directory. After you have installed the
package for one architecture, use `make distclean' before reconfiguring
for another architecture.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PATH'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=PATH' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
_same_ architectures, `configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the `--target=TYPE' option to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
will cause the specified gcc to be used as the C compiler (unless it is
overridden in the site shell script).
`configure' Invocation
======================
`configure' recognizes the following options to control how it
operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

53
tvmet-1.7.1/LICENSE Normal file
View File

@ -0,0 +1,53 @@
ADDENDUM TO LICENSE
Februar 2003
Copyright (C) 2003 Olaf Petzold
Everyone is permitted to copy and distribute verbatim copies
of this license addendum document, but changing it is not allowed.
tvmet License Agreement.
0. tvmet ("The Library") is licensed under GNU Lesser General Public License
as published by the Free Software Foundation, version 2.1 of the License, or
(at your option) any later version, with the following additional conditions.
The following conditions take precedence over any conditions or restrictions
stipulated by the Lesser General Public License insofar as a conflict exists.
1. The tvmet License Agreement ("License") covers only tvmet ("The Library").
Other libraries which the Library may use are covered by their own respective
licenses.
2. Modification of the configure scripts, makefiles, or installation tools of
the Library to support a specific platform does not constitute creating a
modified or derivative work based on the Library.
3. Statically linking of a copy of the Library against any work using the
Library, i.e. the inclusion of (parts of) the Library into a program or binary,
is functionally equivalent to a work using the Library by linking to it
dynamically, and therefore does not constitute creating a modified or derivative
work based on the Library.
4. Otherwise, if the work is a derivative of the Library, you may distribute
the object code for the work under the terms of the GNU Lesser General Public
License. Any executables containing that work also may be distributed under
the Lesser General Public License whether or not they are linked directly with
the Library itself.
5. Programs or binaries linked with the Library must be identified as such by
including, in the Documentation or by other means (for example in the About
Box or Online Help), the following statement:
"This software uses tvmet (http://tvmet.sourceforge.net)."
END OF ADDENDUM

101
tvmet-1.7.1/Makefile.am Normal file
View File

@ -0,0 +1,101 @@
# $Id: Makefile.am,v 1.25 2004/09/16 08:12:28 opetzold Exp $
ACLOCAL_AMFLAGS = -I config
SUBDIRS = include examples testsuite doc tests benchmark
m4sources = \
config/ac_c_long_long.m4 \
config/ac_create_prefix_config_h.m4 \
config/ac_cxx_have_complex.m4 \
config/ac_cxx_have_complex_math1.m4 \
config/ac_cxx_have_complex_math2.m4 \
config/ac_cxx_have_ieee_math.m4 \
config/ac_cxx_have_mutable.m4 \
config/ac_cxx_have_namespaces.m4 \
config/ac_cxx_have_sysv_math.m4 \
config/ac_cxx_partial_specialization.m4 \
config/ac_cxx_typename.m4 \
config/ac_set_compiler.m4 \
config/ac_prog_cxx_intel.m4 \
config/ac_prog_cxx_kai.m4 \
config/ac_prog_cxx_pgi.m4 \
config/op_doxygen_doc.m4
# m4 automake macros
m4datadir = $(datadir)/aclocal
m4data_DATA = tvmet.m4
# setup/config scripts
bin_SCRIPTS = tvmet-config
# manual for script
man_MANS = tvmet-config.1
EXTRA_DIST = \
$(m4sources) \
$(m4data_DATA) \
$(man_MANS) \
ChangeLog.1 \
LICENSE
DISTCLEANFILES = \
$(PACKAGE)-docs-$(VERSION).tar.bz2 \
$(PACKAGE)-$(VERSION).pdf.bz2
# Targets
ChangeLog:
@if test -d CVS -a -x `which cvs2log`; then \
echo "Create ChangeLog from CVS"; \
`which cvs2log`; \
fi
dist-hook: ChangeLog
cp tvmet.spec $(distdir)
$(MAKE) doc-dist
@if test -f $(top_builddir)/doc/$(PACKAGE)-$(VERSION).ps; then \
$(LN_S) $(top_builddir)/doc/$(PACKAGE)-$(VERSION).ps $(PACKAGE)-$(VERSION).ps; \
cat $(top_builddir)/doc/$(PACKAGE)-$(VERSION).ps | bzip2 --best > $(PACKAGE)-$(VERSION).ps.bz2; \
fi
@if test -f $(top_builddir)/doc/$(PACKAGE)-$(VERSION).pdf; then \
$(LN_S) $(top_builddir)/doc/$(PACKAGE)-$(VERSION).pdf $(PACKAGE)-$(VERSION).pdf; \
cat $(top_builddir)/doc/$(PACKAGE)-$(VERSION).pdf | bzip2 --best > $(PACKAGE)-$(VERSION).pdf.bz2; \
fi
.PHONY: release snapshot rpm docs doc-dist
release:
rm -rf .deps */.deps
$(MAKE) distcheck
snapshot:
$(MAKE) dist distdir=$(PACKAGE)-$(VERSION)-`date +"%y%m%d"`
docs:
$(MAKE) -C doc
if CONFIG_DOC
doc-dist: docs
$(MAKE) -C doc doc-dist
mv -f doc/$(PACKAGE)-docs-$(VERSION).tar.bz2 .
else
doc-dist:
endif
example:
$(MAKE) -C examples example
rpm: dist
@if test -f $(PACKAGE).spec; then \
echo "Build rpm distribution"; \
$(RM) $(PACKAGE).spec && make $(PACKAGE).spec; \
fi
rpm -ta --target noarch $(PACKAGE)-$(VERSION).tar.bz2
cp ~/RPM/SRPMS/$(PACKAGE)-$(VERSION)-1.src.rpm .
cp ~/RPM/RPMS/noarch/$(PACKAGE)-$(VERSION)-1.noarch.rpm .
md5:
md5sum `find . -maxdepth 1 -name "*.rpm" -or -name "*.gz" -or -name "*.bz2" -xtype f` > MD5sums
sign: md5
cat MD5sums | gpg --clearsign > .MD5sums && mv .MD5sums MD5sums

822
tvmet-1.7.1/Makefile.in Normal file
View File

@ -0,0 +1,822 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# $Id: Makefile.am,v 1.25 2004/09/16 08:12:28 opetzold Exp $
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_triplet = @host@
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/tvmet-config.in \
$(srcdir)/tvmet.spec.in $(top_srcdir)/config/config.h.in \
$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
THANKS config/config.guess config/config.sub config/depcomp \
config/install-sh config/ltmain.sh config/missing
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
$(top_srcdir)/config/ac_cxx_have_complex.m4 \
$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
$(top_srcdir)/config/ac_cxx_typename.m4 \
$(top_srcdir)/config/ac_set_compiler.m4 \
$(top_srcdir)/config/op_doxygen_doc.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno configure.status.lineno
mkinstalldirs = $(mkdir_p)
CONFIG_HEADER = $(top_builddir)/config/config.h
CONFIG_CLEAN_FILES = tvmet-config tvmet.spec
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(m4datadir)"
binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
SCRIPTS = $(bin_SCRIPTS)
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
install-recursive installcheck-recursive installdirs-recursive \
pdf-recursive ps-recursive uninstall-info-recursive \
uninstall-recursive
man1dir = $(mandir)/man1
NROFF = nroff
MANS = $(man_MANS)
m4dataDATA_INSTALL = $(INSTALL_DATA)
DATA = $(m4data_DATA)
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
{ test ! -d $(distdir) \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; }
DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
CPPUNIT_LIBS = @CPPUNIT_LIBS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DOXYGEN = @DOXYGEN@
DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LATEX_BATCHMODE = @LATEX_BATCHMODE@
LATEX_MODE = @LATEX_MODE@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
ACLOCAL_AMFLAGS = -I config
SUBDIRS = include examples testsuite doc tests benchmark
m4sources = \
config/ac_c_long_long.m4 \
config/ac_create_prefix_config_h.m4 \
config/ac_cxx_have_complex.m4 \
config/ac_cxx_have_complex_math1.m4 \
config/ac_cxx_have_complex_math2.m4 \
config/ac_cxx_have_ieee_math.m4 \
config/ac_cxx_have_mutable.m4 \
config/ac_cxx_have_namespaces.m4 \
config/ac_cxx_have_sysv_math.m4 \
config/ac_cxx_partial_specialization.m4 \
config/ac_cxx_typename.m4 \
config/ac_set_compiler.m4 \
config/ac_prog_cxx_intel.m4 \
config/ac_prog_cxx_kai.m4 \
config/ac_prog_cxx_pgi.m4 \
config/op_doxygen_doc.m4
# m4 automake macros
m4datadir = $(datadir)/aclocal
m4data_DATA = tvmet.m4
# setup/config scripts
bin_SCRIPTS = tvmet-config
# manual for script
man_MANS = tvmet-config.1
EXTRA_DIST = \
$(m4sources) \
$(m4data_DATA) \
$(man_MANS) \
ChangeLog.1 \
LICENSE
DISTCLEANFILES = \
$(PACKAGE)-docs-$(VERSION).tar.bz2 \
$(PACKAGE)-$(VERSION).pdf.bz2
all: all-recursive
.SUFFIXES:
am--refresh:
@:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
cd $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
config/config.h: config/stamp-h1
@if test ! -f $@; then \
rm -f config/stamp-h1; \
$(MAKE) config/stamp-h1; \
else :; fi
config/stamp-h1: $(top_srcdir)/config/config.h.in $(top_builddir)/config.status
@rm -f config/stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status config/config.h
$(top_srcdir)/config/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_srcdir) && $(AUTOHEADER)
rm -f config/stamp-h1
touch $@
distclean-hdr:
-rm -f config/config.h config/stamp-h1
tvmet-config: $(top_builddir)/config.status $(srcdir)/tvmet-config.in
cd $(top_builddir) && $(SHELL) ./config.status $@
tvmet.spec: $(top_builddir)/config.status $(srcdir)/tvmet.spec.in
cd $(top_builddir) && $(SHELL) ./config.status $@
install-binSCRIPTS: $(bin_SCRIPTS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
@list='$(bin_SCRIPTS)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
if test -f $$d$$p; then \
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
$(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
else :; fi; \
done
uninstall-binSCRIPTS:
@$(NORMAL_UNINSTALL)
@list='$(bin_SCRIPTS)'; for p in $$list; do \
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
rm -f "$(DESTDIR)$(bindir)/$$f"; \
done
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
install-man1: $(man1_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
else file=$$i; fi; \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
1*) ;; \
*) ext='1' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
done
uninstall-man1:
@$(NORMAL_UNINSTALL)
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
1*) ;; \
*) ext='1' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
done
install-m4dataDATA: $(m4data_DATA)
@$(NORMAL_INSTALL)
test -z "$(m4datadir)" || $(mkdir_p) "$(DESTDIR)$(m4datadir)"
@list='$(m4data_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " $(m4dataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(m4datadir)/$$f'"; \
$(m4dataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(m4datadir)/$$f"; \
done
uninstall-m4dataDATA:
@$(NORMAL_UNINSTALL)
@list='$(m4data_DATA)'; for p in $$list; do \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " rm -f '$(DESTDIR)$(m4datadir)/$$f'"; \
rm -f "$(DESTDIR)$(m4datadir)/$$f"; \
done
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if (etags --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
else \
include_option=--include; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
$(am__remove_distdir)
mkdir $(distdir)
$(mkdir_p) $(distdir)/. $(distdir)/config $(distdir)/doc $(distdir)/include/tvmet/config
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| mkdir "$(distdir)/$$subdir" \
|| exit 1; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="../$(top_distdir)" \
distdir="../$(distdir)/$$subdir" \
distdir) \
|| exit 1; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$(top_distdir)" distdir="$(distdir)" \
dist-hook
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir)
dist-gzip: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist-bzip2: distdir
$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-tarZ: distdir
$(AMTAR) chof - $(distdir) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
dist dist-all: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - ;;\
*.tar.bz2*) \
bunzip2 -c $(distdir).tar.bz2 | $(AMTAR) xf - ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(AMTAR) xf - ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& cd $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
} || { rm -rf "$$dc_destdir"; exit 1; }) \
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
$(am__remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
distuninstallcheck:
@cd $(distuninstallcheck_dir) \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
fi ; \
$(distuninstallcheck_listfiles) ; \
exit 1; } >&2
distcleancheck: distclean
@if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left in build directory after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile $(SCRIPTS) $(MANS) $(DATA)
installdirs: installdirs-recursive
installdirs-am:
for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(m4datadir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr \
distclean-libtool distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
info: info-recursive
info-am:
install-data-am: install-m4dataDATA install-man
install-exec-am: install-binSCRIPTS
install-info: install-info-recursive
install-man: install-man1
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am: uninstall-binSCRIPTS uninstall-info-am \
uninstall-m4dataDATA uninstall-man
uninstall-info: uninstall-info-recursive
uninstall-man: uninstall-man1
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
check-am clean clean-generic clean-libtool clean-recursive \
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
dist-shar dist-tarZ dist-zip distcheck distclean \
distclean-generic distclean-hdr distclean-libtool \
distclean-recursive distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-binSCRIPTS install-data \
install-data-am install-exec install-exec-am install-info \
install-info-am install-m4dataDATA install-man install-man1 \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
tags tags-recursive uninstall uninstall-am \
uninstall-binSCRIPTS uninstall-info-am uninstall-m4dataDATA \
uninstall-man uninstall-man1
# Targets
ChangeLog:
@if test -d CVS -a -x `which cvs2log`; then \
echo "Create ChangeLog from CVS"; \
`which cvs2log`; \
fi
dist-hook: ChangeLog
cp tvmet.spec $(distdir)
$(MAKE) doc-dist
@if test -f $(top_builddir)/doc/$(PACKAGE)-$(VERSION).ps; then \
$(LN_S) $(top_builddir)/doc/$(PACKAGE)-$(VERSION).ps $(PACKAGE)-$(VERSION).ps; \
cat $(top_builddir)/doc/$(PACKAGE)-$(VERSION).ps | bzip2 --best > $(PACKAGE)-$(VERSION).ps.bz2; \
fi
@if test -f $(top_builddir)/doc/$(PACKAGE)-$(VERSION).pdf; then \
$(LN_S) $(top_builddir)/doc/$(PACKAGE)-$(VERSION).pdf $(PACKAGE)-$(VERSION).pdf; \
cat $(top_builddir)/doc/$(PACKAGE)-$(VERSION).pdf | bzip2 --best > $(PACKAGE)-$(VERSION).pdf.bz2; \
fi
.PHONY: release snapshot rpm docs doc-dist
release:
rm -rf .deps */.deps
$(MAKE) distcheck
snapshot:
$(MAKE) dist distdir=$(PACKAGE)-$(VERSION)-`date +"%y%m%d"`
docs:
$(MAKE) -C doc
@CONFIG_DOC_TRUE@doc-dist: docs
@CONFIG_DOC_TRUE@ $(MAKE) -C doc doc-dist
@CONFIG_DOC_TRUE@ mv -f doc/$(PACKAGE)-docs-$(VERSION).tar.bz2 .
@CONFIG_DOC_FALSE@doc-dist:
example:
$(MAKE) -C examples example
rpm: dist
@if test -f $(PACKAGE).spec; then \
echo "Build rpm distribution"; \
$(RM) $(PACKAGE).spec && make $(PACKAGE).spec; \
fi
rpm -ta --target noarch $(PACKAGE)-$(VERSION).tar.bz2
cp ~/RPM/SRPMS/$(PACKAGE)-$(VERSION)-1.src.rpm .
cp ~/RPM/RPMS/noarch/$(PACKAGE)-$(VERSION)-1.noarch.rpm .
md5:
md5sum `find . -maxdepth 1 -name "*.rpm" -or -name "*.gz" -or -name "*.bz2" -xtype f` > MD5sums
sign: md5
cat MD5sums | gpg --clearsign > .MD5sums && mv .MD5sums MD5sums
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

190
tvmet-1.7.1/NEWS Normal file
View File

@ -0,0 +1,190 @@
* release 1.7.1
- major and minor bug fix release.
- element wise operations on non square matrix expressions.
does work as expected now.
- tvmet compiles with gcc 3.4.3.
- extended docs.
- new regression tests.
* release 1.7.0
- support for Microsoft VC++ 7.1
- several critical bug fixes.
- docs enhanced and corrected; new chapter for VC++ 7.1.
- conj for signed types disabled, since an unary minus operator
applied to unsigned type will result unsigned type.
- drem, hypot, jn, yn, cbrt and rint are inside the global namespace
now.
- some fixes for Makefile on creating pdf documentation.
- header depencies limited.
* release 1.6.0
- major bug fix: tvmet did crash on zero matrix print (introduced
with release 1.5.0, there was only a patch available).
- corrected and extended docs.
- new regressions added for traits.
- some compiler specific optimizations for gcc and icc
(compatibility mode) introduced, use it by defined TVMET_OPTIMIZE.
This uses the gcc's __attribute__((always_inline)) wrapped by a
macro - this allows to produce high optimized and inline code
even on lower optimization levels, e.g. -O. This is enabled by
configure process by --enable-optimize.
- For pgCC 5.1 the TVMET_HAVE_LONG_DOUBLE has been disabled, since
the support is incomplete imo. For icc some pragma are used
to avoid warnings about 'operands are evaluated in unspecified
order' since it concerns ostream printing only.
- traits prepared to be an entry point of several functions
used in the feature.
- new functions c{matrix,vector}_ref to handle C style vectors
and arrays as expressions - using inside the tvmet Matrix/Vector
expressions as usual.
- tvmet's syntax/naming convention more cleaner, code should be
more readable now. Further more unused template parameter has
been removed.
- new function identity<>() to create identity matrices.
- some cosmetic changes.
* release 1.5.0
- the build process is more compliant to the GNU standard.
- alias function extended.
- Matrix and Vector data printing improved, gives better output
even by negative values/contents.
- configure script supports different compiler better; users
can specify --enable-optimize, --enable-debug and
--enable-warnings for their needs.
- the configure and build process has been improved generally;
tvmet can be build in a separate build directory and passes
the distcheck target successfully.
* release 1.4.1
- new function alias to solve the aliasing problem.
- major bug fix: forgotten header tvmet/loop/Vector.h added
and benchmark shows AtA and AAt graph with matrices
less than 10x10 too - the BTL patch is updated.
* release 1.4.0
- major and minor bug fixes
- Matrix/Vector and XprMatrix/XprVector uses an assign_to()
function - this could be a way for pre-evaluate/caching
nodes of the sub expressions for further releases.
- an alternate way of computing matrix-matrix and matrix-vector
products added: using meta templates or loops. Therefore some
trigger are introduced which are not tuned yet. Using
matrix-matrix products less than Rows*Cols 8*8 or
matrix-vector products less than Sz=8 uses meta templates
else loops.
- regression tests added for loop products, as well as bugs
fixed.
- enums Rows, Cols and Size for Matrix and Vector are
introduced.
- expression level printing improved - more info's are shown
- output format has been changed, the output is compatible
to octave/matlab. To get the type and size info as before
a new member function info() has been introduced which can
be streamed to ostreams.
- improved data printing, aligns output regarding of maximum
element.
- different members for expression and data printing.
- BTL benchmark results added.
* release 1.3.0
- major and minor bug fixes - all users should update !
- RVO problem/bug removed, chaining/composed expressions are
working now. The problem was related on use of temporaries
on composed functions, which gone out of scope.
- sources compiled without optimizations, by -O0, doesn't crash
any more. The Problem was related by holding expressions by
references instead by value. At higher optimization levels
there were no faults than.
- better english documentation (spelling and grammar) as well
some corrections and extensions.
- benchmark removed from sources.
- interface changes.
- prodTrans renamed to trans_prod to follow the naming convention
- boolean version of eval removed to avoid confusion, comparing
is done using all_elements and any_elements.
- support for complex<> slightly improved.
* release 1.2.1
- major and minor bug fixes.
- corrected and extended docs.
- tvmet's const correctness improved.
* release 1.2.0
- major and minor bug fixes
- better gcc 2.95.3 support but, still problems
- function naming convention from product to prod, transpose
to trans etc. changed.
- new functions add,sub,mul and div on element wise functions.
- expressions used for row/col and diag vectors on matrices,
prevents use of temporaries on expressions for pre-evaluation.
- Vector access using braces () is default on internal use,
brackets [] are still valid and supported.
- better debug support.
- regression test improved and more tests added, especially
on expressions.
- more functions and operators on functions.
- better header file layout.
* release 1.1.0
- major and minor bug fixes
- new meta templated functions for matrix operations for
product(transpose(M), M), product(M, transpose(M)) and
transpose(product(M,M)), namely MtM_product(), MMt_product
as well as productTransposed().
- productTranspose(M,V) renamed to Mtx_product(). In this
function is a return dimension bug removed (working for non-
square matrices too now).
- Therefore, old productTransposed() functions doesn't have
the old meaning any more!
- a matrix expression can be transposed too.
- new functions and operators for products of expression of
matrices and vectors added - chaining of this should work
now.
- better support for non-square matrices and non-square
matrix-matrix and matrix-vector functions/operations.
- regression test improved and more tests added.
- file and directory structure extended.
* release 1.0.1:
- minor bug fixes
* release 1.0.0:
- corrected and improved documents
- new product(XprMatrix, Vector) and operator*(XprMatrix, Vector)
as well as product(XprMatrix<>, XprVector<>),
- more regression tests
- better intel compiler support
- extended include directory structure
* release 0.9.0:
- the benchmark is delayed.
- new function product(XprMatrix<>,XprMatrix<>) and operator*
(XprMatrix<>,XprMatrix<>), therefore concating of mathematical
expressions are better supported now.
- Addendum to the LGPL, static linking is explicit allowed.
- regression tests for element wise operations added.
- docs FAQ enhanced.
- new function diag(Matrix<>) added.
- autoconf 2.5x ready.
- default distribution is tar.bz2 now.
- tvmet-doc-xxx.prm target removed, docs are inside the rpm
package self.
%%% Local IspellDict: "english"

9
tvmet-1.7.1/README Normal file
View File

@ -0,0 +1,9 @@
This tiny vector and matrix template libary uses meta templates and
template expressions to evaluate results at compile time - to make
it fast for low order systems. Temporaries are kicked off.
Nevertheless, this isn't a matlab or octave in C++!
For more informations please have a look into docs/html/ or to the
project web page at http://tvmet.sourceforge.net

49
tvmet-1.7.1/THANKS Normal file
View File

@ -0,0 +1,49 @@
Thanks to:
- Alexei Sheplyakov reported a bug inside the matrix expressions
using elementwise operations and others.
- Robi Carnecky for his report on success using MS VC 7.1 and
reporting missing typename keyword inside CommaInitializer.h
and others.
- Krzysiek Goj found a bug inside the swap functions and
reported problems on calling functions in wrong namespace.
- Claudia Bertram for reporting a bug by printing a zero
elements matrix.
- Julian Cummings for his help on supporting complex types and
some other comments on tvmet.
- Alex V. Frolov found inconsistens on typepromotion used.
- David J. C. Beach, thanks! He checked the grammar and spelling
of tvmet's documents. Further more, he gave me hints for
any/all_elements and eval.
- David Sarrut for correction on the matrix column access bug.
- Holger Spiess, for his testing on real application (FEM), reporting
problems and conversations.
- Erik Kruus, he found a bug inside tvmet.m4.
- George Schnurer for his suggestions and help concerning the licensing
and the need to an addendum to it.
- Laurent Plagne, the author of the BTL, for his testing and comparing
tvmet against other libs and others.
- Jörg Walter about using uBlas faster assuming alias free operations.
Further more for his great conversation about benchmarking and others,
thanks!
- Jörg Barfurth from de.compl.lang.iso-c++ for his help on instance
problems with templates occoured on regressions test.
- Michael Kochetkov and Tom from comp.lang.c++ for help on namespace
problems. Now I know more about Koenig lookup and the problems due
too 8)
- Darin DeForest, he found a nasty bug inside the regression tests.

6945
tvmet-1.7.1/aclocal.m4 vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
# $Id: Makefile.am,v 1.4 2003/12/04 19:18:09 opetzold Exp $
EXTRA_DIST = BTL-20030124.patch

View File

@ -0,0 +1,338 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# $Id: Makefile.am,v 1.4 2003/12/04 19:18:09 opetzold Exp $
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_triplet = @host@
subdir = benchmark
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
$(top_srcdir)/config/ac_cxx_have_complex.m4 \
$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
$(top_srcdir)/config/ac_cxx_typename.m4 \
$(top_srcdir)/config/ac_set_compiler.m4 \
$(top_srcdir)/config/op_doxygen_doc.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
CONFIG_HEADER = $(top_builddir)/config/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
CPPUNIT_LIBS = @CPPUNIT_LIBS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DOXYGEN = @DOXYGEN@
DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LATEX_BATCHMODE = @LATEX_BATCHMODE@
LATEX_MODE = @LATEX_MODE@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
EXTRA_DIST = BTL-20030124.patch
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu benchmark/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu benchmark/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-libtool
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-exec install-exec-am \
install-info install-info-am install-man install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,18 @@
dnl $Id: ac_c_long_long.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl Provides a test for the existance of the long long int type and
dnl defines HAVE_LONG_LONG if it is found.
dnl
AC_DEFUN([AC_C_LONG_LONG],
[AC_CACHE_CHECK(for long long int, ac_cv_c_long_long,
[AC_LANG_PUSH([C++])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
long long int i;
]], [[]])],[ac_cv_c_long_long=yes],[ac_cv_c_long_long=no])
AC_LANG_POP([C++])
])
if test "$ac_cv_c_long_long" = yes; then
AC_DEFINE(HAVE_LONG_LONG,,[Define if the compiler supports the long_long type])
fi
])

View File

@ -0,0 +1,107 @@
dnl @synopsis AC_CREATE_PREFIX_CONFIG_H [(OUTPUT-HEADER [,PREFIX [,ORIG-HEADER]])]
dnl
dnl this is a new variant from ac_prefix_config_
dnl this one will use a lowercase-prefix if
dnl the config-define was starting with a lowercase-char, e.g.
dnl #define const or #define restrict or #define off_t
dnl (and this one can live in another directory, e.g. testpkg/config.h
dnl therefore I decided to move the output-header to be the first arg)
dnl
dnl takes the usual config.h generated header file; looks for each of
dnl the generated "#define SOMEDEF" lines, and prefixes the defined name
dnl (ie. makes it "#define PREFIX_SOMEDEF". The result is written to
dnl the output config.header file. The PREFIX is converted to uppercase
dnl for the conversions.
dnl
dnl default OUTPUT-HEADER = $PACKAGE-config.h
dnl default PREFIX = $PACKAGE
dnl default ORIG-HEADER, derived from OUTPUT-HEADER
dnl if OUTPUT-HEADER has a "/", use the basename
dnl if OUTPUT-HEADER has a "-", use the section after it.
dnl otherwise, just config.h
dnl
dnl In most cases, the configure.in will contain a line saying
dnl AC_CONFIG_HEADER(config.h)
dnl somewhere *before* AC_OUTPUT and a simple line saying
dnl AC_PREFIX_CONFIG_HEADER
dnl somewhere *after* AC_OUTPUT.
dnl
dnl example:
dnl AC_INIT(config.h.in) # config.h.in as created by "autoheader"
dnl AM_INIT_AUTOMAKE(testpkg, 0.1.1) # "#undef VERSION" and "PACKAGE"
dnl AM_CONFIG_HEADER(config.h) # in config.h.in
dnl AC_MEMORY_H # "#undef NEED_MEMORY_H"
dnl AC_C_CONST_H # "#undef const"
dnl AC_OUTPUT(Makefile) # creates the "config.h" now
dnl AC_CREATE_PREFIX_CONFIG_H # creates "testpkg-config.h"
dnl and the resulting "testpkg-config.h" contains lines like
dnl #ifndef TESTPKG_VERSION
dnl #define TESTPKG_VERSION "0.1.1"
dnl #endif
dnl #ifndef TESTPKG_NEED_MEMORY_H
dnl #define TESTPKG_NEED_MEMORY_H 1
dnl #endif
dnl #ifndef _testpkg_const
dnl #define _testpkg_const const
dnl #endif
dnl
dnl and this "testpkg-config.h" can be installed along with other
dnl header-files, which is most convenient when creating a shared
dnl library (that has some headers) where some functionality is
dnl dependent on the OS-features detected at compile-time. No
dnl need to invent some "testpkg-confdefs.h.in" manually. :-)
dnl
dnl @version $Id: ac_create_prefix_config_h.m4,v 1.1.1.1 2003/02/08 19:32:50 opetzold Exp $
dnl @author Guido Draheim <guidod@gmx.de>
AC_DEFUN([AC_CREATE_PREFIX_CONFIG_H],
[changequote({, })dnl
ac_prefix_conf_OUT=`echo ifelse($1, , ${PACKAGE_TARNAME}-config.h, $1)`
ac_prefix_conf_DEF=`echo _$ac_prefix_conf_OUT | sed -e 'y:abcdefghijklmnopqrstuvwxyz./,-:ABCDEFGHIJKLMNOPQRSTUVWXYZ____:'`
ac_prefix_conf_PKG=`echo ifelse($2, , ${PACKAGE_TARNAME}, $2)`
ac_prefix_conf_LOW=`echo _$ac_prefix_conf_PKG | sed -e 'y:ABCDEFGHIJKLMNOPQRSTUVWXYZ-:abcdefghijklmnopqrstuvwxyz_:'`
ac_prefix_conf_UPP=`echo $ac_prefix_conf_PKG | sed -e 'y:abcdefghijklmnopqrstuvwxyz-:ABCDEFGHIJKLMNOPQRSTUVWXYZ_:' -e '/^[0-9]/s/^/_/'`
ac_prefix_conf_INP=`echo ifelse($3, , _, $3)`
if test "$ac_prefix_conf_INP" = "_"; then
case $ac_prefix_conf_OUT in
*/*) ac_prefix_conf_INP=`basename $ac_prefix_conf_OUT`
;;
*-*) ac_prefix_conf_INP=`echo $ac_prefix_conf_OUT | sed -e 's/[a-zA-Z0-9_]*-//'`
;;
*) ac_prefix_conf_INP=config.h
;;
esac
fi
changequote([, ])dnl
if test -z "$ac_prefix_conf_PKG" ; then
AC_MSG_ERROR([no prefix for _PREFIX_PKG_CONFIG_H])
else
AC_MSG_RESULT(creating $ac_prefix_conf_OUT - prefix $ac_prefix_conf_UPP for $ac_prefix_conf_INP defines)
if test -f $ac_prefix_conf_INP ; then
AS_DIRNAME([/* automatically generated */], $ac_prefix_conf_OUT)
changequote({, })dnl
echo '#ifndef '$ac_prefix_conf_DEF >$ac_prefix_conf_OUT
echo '#define '$ac_prefix_conf_DEF' 1' >>$ac_prefix_conf_OUT
echo ' ' >>$ac_prefix_conf_OUT
echo /'*' $ac_prefix_conf_OUT. Generated automatically at end of configure. '*'/ >>$ac_prefix_conf_OUT
echo 's/#undef *\([A-Z_]\)/#undef '$ac_prefix_conf_UPP'_\1/' >conftest.sed
echo 's/#undef *\([a-z]\)/#undef '$ac_prefix_conf_LOW'_\1/' >>conftest.sed
echo 's/#define *\([A-Z_][A-Za-z0-9_]*\)\(.*\)/#ifndef '$ac_prefix_conf_UPP"_\\1 \\" >>conftest.sed
echo '#define '$ac_prefix_conf_UPP"_\\1 \\2 \\" >>conftest.sed
echo '#endif/' >>conftest.sed
echo 's/#define *\([a-z][A-Za-z0-9_]*\)\(.*\)/#ifndef '$ac_prefix_conf_LOW"_\\1 \\" >>conftest.sed
echo '#define '$ac_prefix_conf_LOW"_\\1 \\2 \\" >>conftest.sed
echo '#endif/' >>conftest.sed
sed -f conftest.sed $ac_prefix_conf_INP >>$ac_prefix_conf_OUT
echo ' ' >>$ac_prefix_conf_OUT
echo '/*' $ac_prefix_conf_DEF '*/' >>$ac_prefix_conf_OUT
echo '#endif' >>$ac_prefix_conf_OUT
changequote([, ])dnl
else
AC_MSG_ERROR([input file $ac_prefix_conf_IN does not exist, dnl
skip generating $ac_prefix_conf_OUT])
fi
rm -f conftest.*
fi])

View File

@ -0,0 +1,21 @@
dnl $Id: ac_cxx_have_complex.m4,v 1.3 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl Available from the GNU Autoconf Macro Archive at:
dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_complex.html
dnl
AC_DEFUN([AC_CXX_HAVE_COMPLEX],
[AC_CACHE_CHECK(whether the compiler has complex<T>,
ac_cv_cxx_have_complex,
[AC_REQUIRE([AC_CXX_NAMESPACES])
AC_LANG_PUSH([C++])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <complex>
#ifdef HAVE_NAMESPACES
using namespace std;
#endif]], [[complex<float> a; complex<double> b; return 0;]])],[ac_cv_cxx_have_complex=yes],[ac_cv_cxx_have_complex=no])
AC_LANG_POP([C++])
])
if test "$ac_cv_cxx_have_complex" = yes; then
AC_DEFINE(HAVE_COMPLEX,,[define if the compiler has complex<T>])
fi
])

View File

@ -0,0 +1,27 @@
dnl $Id: ac_cxx_have_complex_math1.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl Available from the GNU Autoconf Macro Archive at:
dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_complex_math1.html
dnl
AC_DEFUN([AC_CXX_HAVE_COMPLEX_MATH1],
[AC_CACHE_CHECK(whether the compiler has complex math functions,
ac_cv_cxx_have_complex_math1,
[AC_REQUIRE([AC_CXX_NAMESPACES])
AC_LANG_PUSH([C++])
ac_save_LIBS="$LIBS"
LIBS="$LIBS -lm"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <complex>
#ifdef HAVE_NAMESPACES
using namespace std;
#endif]], [[complex<double> x(1.0, 1.0), y(1.0, 1.0);
cos(x); cosh(x); exp(x); log(x); pow(x,1); pow(x,double(2.0));
pow(x, y); pow(double(2.0), x); sin(x); sinh(x); sqrt(x); tan(x); tanh(x);
return 0;]])],[ac_cv_cxx_have_complex_math1=yes],[ac_cv_cxx_have_complex_math1=no])
LIBS="$ac_save_LIBS"
AC_LANG_POP([C++])
])
if test "$ac_cv_cxx_have_complex_math1" = yes; then
AC_DEFINE(HAVE_COMPLEX_MATH1,,[define if the compiler has complex math functions])
fi
])

View File

@ -0,0 +1,26 @@
dnl $Id: ac_cxx_have_complex_math2.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl Available from the GNU Autoconf Macro Archive at:
dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_complex_math2.html
dnl
AC_DEFUN([AC_CXX_HAVE_COMPLEX_MATH2],
[AC_CACHE_CHECK(whether the compiler has more complex math functions,
ac_cv_cxx_have_complex_math2,
[AC_REQUIRE([AC_CXX_NAMESPACES])
AC_LANG_PUSH([C++])
ac_save_LIBS="$LIBS"
LIBS="$LIBS -lm"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <complex>
#ifdef HAVE_NAMESPACES
using namespace std;
#endif]], [[complex<double> x(1.0, 1.0), y(1.0, 1.0);
acos(x); asin(x); atan(x); atan2(x,y); atan2(x, double(3.0));
atan2(double(3.0), x); log10(x); return 0;]])],[ac_cv_cxx_have_complex_math2=yes],[ac_cv_cxx_have_complex_math2=no])
LIBS="$ac_save_LIBS"
AC_LANG_POP([C++])
])
if test "$ac_cv_cxx_have_complex_math2" = yes; then
AC_DEFINE(HAVE_COMPLEX_MATH2,,[define if the compiler has more complex math functions])
fi
])

View File

@ -0,0 +1,42 @@
dnl $Id: ac_cxx_have_ieee_math.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl Check for compiler support for double IEEE math, if there define
dnl HAVE_IEEE_MATH.
dnl
AC_DEFUN([AC_CXX_HAVE_IEEE_MATH],
[AC_CACHE_CHECK(for IEEE math library,
ac_cv_cxx_have_ieee_math,
[AC_LANG_PUSH([C++])
ac_save_LIBS="$LIBS"
LIBS="$LIBS -lm"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#ifndef _ALL_SOURCE
#define _ALL_SOURCE
#endif
#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE
#endif
#ifndef _XOPEN_SOURCE_EXTENDED
#define _XOPEN_SOURCE_EXTENDED 1
#endif
#include <cmath>]], [[double x = 1.0; double y = 1.0;
acosh(x); asinh(x); atanh(x);
expm1(x);
erf(x); erfc(x);
// finite(x);
isnan(x);
j0(x); j1(x);
lgamma(x);
logb(x); log1p(x);
rint(x);
// trunc(x);
y0(x); y1(x);
return 0;]])],[ac_cv_cxx_have_ieee_math=yes],[ac_cv_cxx_have_ieee_math=no])
LIBS="$ac_save_LIBS"
AC_LANG_POP([C++])
])
if test "$ac_cv_cxx_have_ieee_math" = yes; then
AC_DEFINE(HAVE_IEEE_MATH,,[Define if the compiler supports IEEE math library])
fi
])

View File

@ -0,0 +1,23 @@
dnl $Id: ac_cxx_have_mutable.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl If the compiler allows modifying data members of classes flagged with
dnl the mutable keyword even in const objects, define HAVE_MUTABLE.
dnl
AC_DEFUN([AC_CXX_HAVE_MUTABLE],
[AC_CACHE_CHECK(for mutable,
ac_cv_cxx_mutable,
[AC_LANG_PUSH([C++])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
class Foo {
mutable int i;
public:
int bar (int n) const { i = n; return i; }
};
]], [[Foo foo; return foo.bar(1);]])],[ac_cv_cxx_mutable=yes],[ac_cv_cxx_mutable=no])
AC_LANG_POP([C++])
])
if test "$ac_cv_cxx_mutable" = yes; then
AC_DEFINE(HAVE_MUTABLE,,[Define if the compiler supports the mutable keyword])
fi
])

View File

@ -0,0 +1,17 @@
dnl $Id: ac_cxx_have_namespaces.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl If the compiler can prevent names clashes using namespaces, define
dnl HAVE_NAMESPACES.
dnl
AC_DEFUN([AC_CXX_NAMESPACES],
[AC_CACHE_CHECK(for namespaces support,
ac_cv_cxx_namespaces,
[AC_LANG_PUSH([C++])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[namespace Outer { namespace Inner { int i = 0; }}]], [[using namespace Outer::Inner; return i;]])],[ac_cv_cxx_namespaces=yes],[ac_cv_cxx_namespaces=no])
AC_LANG_POP([C++])
])
if test "$ac_cv_cxx_namespaces" = yes; then
AC_DEFINE(HAVE_NAMESPACES,,[Define if the compiler implements namespaces])
fi
])

View File

@ -0,0 +1,46 @@
dnl $Id: ac_cxx_have_sysv_math.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl Check for compiler support for double SYSV math, if there define
dnl HAVE_SYSV_MATH.
dnl
AC_DEFUN([AC_CXX_HAVE_SYSV_MATH],
[AC_CACHE_CHECK(for SYSV math library,
ac_cv_cxx_have_sysv_math,
[AC_LANG_PUSH([C++])
ac_save_LIBS="$LIBS"
LIBS="$LIBS -lm"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#ifndef _ALL_SOURCE
#define _ALL_SOURCE
#endif
#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE
#endif
#ifndef _XOPEN_SOURCE_EXTENDED
#define _XOPEN_SOURCE_EXTENDED 1
#endif
#include <cmath>]], [[double x = 1.0; double y = 1.0;
_class(x);
ilogb(x);
itrunc(x);
nearest(x);
rsqrt(x);
uitrunc(x);
copysign(x,y);
drem(x,y);
fmod(x,y);
hypot(x,y);
nextafter(x,y);
remainder(x,y);
scalb(x,y);
unordered(x,y);
return 0;]])],[ac_cv_cxx_have_sysv_math=yes],[ac_cv_cxx_have_sysv_math=no])
LIBS="$ac_save_LIBS"
AC_LANG_POP([C++])
])
if test "$ac_cv_cxx_have_sysv_math" = yes; then
AC_DEFINE(HAVE_SYSV_MATH,,[Define if the compiler supports SYSV math library])
fi
])

View File

@ -0,0 +1,21 @@
dnl $Id: ac_cxx_partial_specialization.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl Check if the compiler supports partial template specialization,
dnl on support define HAVE_PARTIAL_SPECIALIZATION.
dnl
AC_DEFUN([AC_CXX_PARTIAL_SPECIALIZATION],
[AC_CACHE_CHECK(whether the compiler supports partial specialization,
ac_cv_cxx_partial_specialization,
[AC_LANG_PUSH([C++])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
template<class T, int N> class X { public : enum { e = 0 }; };
template<int N> class X<double, N> { public : enum { e = 1 }; };
template<class T> class X<T, 2> { public : enum { e = 2 }; };
]], [[return (X<int,3>::e == 0) && (X<double,3>::e == 1) && (X<float,2>::e == 2);]])],[ac_cv_cxx_partial_specialization=yes],[ac_cv_cxx_partial_specialization=no])
AC_LANG_POP([C++])
])
if test "$ac_cv_cxx_partial_specialization" = yes; then
AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION,,[Define if the compiler supports partial specialization])
fi
])

View File

@ -0,0 +1,16 @@
dnl $Id: ac_cxx_typename.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl Check compiler support for "typename" keyword, define HAVE_TYPENAME if there.
dnl
AC_DEFUN([AC_CXX_TYPENAME],
[AC_CACHE_CHECK(for typename,
ac_cv_cxx_typename,
[ AC_LANG_PUSH([C++])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[template<typename T>class X {public:X(){}};]], [[X<float> x; return 0;]])],[ac_cv_cxx_typename=yes],[ac_cv_cxx_typename=no])
AC_LANG_POP([C++])
])
if test "$ac_cv_cxx_typename" = yes; then
AC_DEFINE(HAVE_TYPENAME,,[Define if the compiler recognizes typename])
fi
])

View File

@ -0,0 +1,18 @@
dnl $Id: ac_prog_cxx_intel.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl Check for Intel C++ compiler
dnl
AC_DEFUN([AC_PROG_CXX_INTEL],
[AC_CACHE_CHECK(whether we are using INTEL C++, INTEL_CXX,
[cat > conftest.c <<EOF
# if defined(__ICL) || defined(__ICC)
yes;
#endif
EOF
if AC_TRY_COMMAND(${CXX} -E conftest.c) | egrep yes >/dev/null 2>&1; then
INTEL_CXX=yes
compiler=intelcc
else
INTEL_CXX=no
fi])])

View File

@ -0,0 +1,19 @@
dnl $Id: ac_prog_cxx_kai.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl Check for KAI C++ compiler
dnl
AC_DEFUN([AC_PROG_CXX_KAI],
[AC_CACHE_CHECK(whether we are using KAI C++,
KAI_CXX,
[cat > conftest.c <<EOF
# if defined(__KCC)
yes;
#endif
EOF
if AC_TRY_COMMAND(${CXX} -E conftest.c) | egrep yes >/dev/null 2>&1; then
KAI_CXX=yes
compiler=kaicc
else
KAI_CXX=no
fi])])

View File

@ -0,0 +1,18 @@
dnl $Id: ac_prog_cxx_pgi.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl Portland Group Incorporated C++ compiler
dnl
AC_DEFUN([AC_PROG_CXX_PGI],
[AC_CACHE_CHECK(whether we are using PGI C++, PGI_CXX,
[cat > conftest.c <<EOF
# if defined(__PGI)
yes;
#endif
EOF
if AC_TRY_COMMAND(${CXX} -E conftest.c) | egrep yes >/dev/null 2>&1; then
PGI_CXX=yes
compiler=pgicc
else
PGI_CXX=no
fi])])

View File

@ -0,0 +1,21 @@
dnl $Id: ac_set_compiler.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl AC_SET_COMPILER: borrowed from blitz++
dnl
AC_DEFUN([AC_SET_COMPILER],
[cxxwith=`echo $1 | sed -e 's/ /@/'`
case "$cxxwith" in
*:*@*) # Full initialization syntax
CXX=`echo "$cxxwith" | sed -n -e 's/.*:\(.*\)@.*/\1/p'`
CXXFLAGS=`echo "$cxxwith" | sed -n -e 's/.*:.*@\(.*\)/\1/p'`
;;
*:*) # Simple initialization syntax
CXX=`echo "$cxxwith" | sed -n -e 's/.*:\(.*\)/\1/p'`
CXXFLAGS=$3
;;
*) # Default values
CXX=$2
CXXFLAGS=$3
;;
esac])

1456
tvmet-1.7.1/config/config.guess vendored Executable file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,126 @@
/* config/config.h.in. Generated from configure.ac by autoheader. */
/* define if the compiler has complex<T> */
#undef HAVE_COMPLEX
/* define if the compiler has complex math functions */
#undef HAVE_COMPLEX_MATH1
/* define if the compiler has more complex math functions */
#undef HAVE_COMPLEX_MATH2
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you have the `floor' function. */
#undef HAVE_FLOOR
/* Define if the compiler supports IEEE math library */
#undef HAVE_IEEE_MATH
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the `dl' library (-ldl). */
#undef HAVE_LIBDL
/* Define to 1 if long double works and has more range or precision than
double. */
#undef HAVE_LONG_DOUBLE
/* Define if the compiler supports the long_long type */
#undef HAVE_LONG_LONG
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define if the compiler supports the mutable keyword */
#undef HAVE_MUTABLE
/* Define if the compiler implements namespaces */
#undef HAVE_NAMESPACES
/* Define if the compiler supports partial specialization */
#undef HAVE_PARTIAL_SPECIALIZATION
/* Define to 1 if you have the `pow' function. */
#undef HAVE_POW
/* Define to 1 if you have the `rint' function. */
#undef HAVE_RINT
/* Define to 1 if you have the `sqrt' function. */
#undef HAVE_SQRT
/* Define to 1 if stdbool.h conforms to C99. */
#undef HAVE_STDBOOL_H
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define if the compiler supports SYSV math library */
#undef HAVE_SYSV_MATH
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define if the compiler recognizes typename */
#undef HAVE_TYPENAME
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to 1 if the system has the type `_Bool'. */
#undef HAVE__BOOL
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
#undef TM_IN_SYS_TIME
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
/* Define to `__inline__' or `__inline' if that's what the C compiler
calls it, or to nothing if 'inline' is not supported under any name. */
#ifndef __cplusplus
#undef inline
#endif
/* Define to equivalent of C99 restrict keyword, or to nothing if this is not
supported. Do not define if restrict is supported directly. */
#undef restrict
/* Define to `unsigned' if <sys/types.h> does not define. */
#undef size_t

1549
tvmet-1.7.1/config/config.sub vendored Executable file

File diff suppressed because it is too large Load Diff

520
tvmet-1.7.1/config/depcomp Executable file
View File

@ -0,0 +1,520 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
scriptversion=2003-11-08.23
# Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
case $1 in
'')
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
Run PROGRAMS ARGS to compile a file, generating dependencies
as side-effects.
Environment variables:
depmode Dependency tracking mode.
source Source file read by `PROGRAMS ARGS'.
object Object file output by `PROGRAMS ARGS'.
depfile Dependency file to output.
tmpdepfile Temporary file to use when outputing dependencies.
libtool Whether libtool is used (yes/no).
Report bugs to <bug-automake@gnu.org>.
EOF
exit 0
;;
-v | --v*)
echo "depcomp $scriptversion"
exit 0
;;
esac
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
echo "depcomp: Variables source, object and depmode must be set" 1>&2
exit 1
fi
# `libtool' can also be set to `yes' or `no'.
if test -z "$depfile"; then
base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
dir=`echo "$object" | sed 's,/.*$,/,'`
if test "$dir" = "$object"; then
dir=
fi
# FIXME: should be _deps on DOS.
depfile="$dir.deps/$base"
fi
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile"
# Some modes work just like other modes, but use different flags. We
# parameterize here, but still list the modes in the big case below,
# to make depend.m4 easier to write. Note that we *cannot* use a case
# here, because this file can only contain one case statement.
if test "$depmode" = hp; then
# HP compiler uses -M and no extra arg.
gccflag=-M
depmode=gcc
fi
if test "$depmode" = dashXmstdout; then
# This is just like dashmstdout with a different argument.
dashmflag=-xM
depmode=dashmstdout
fi
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm.
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
mv "$tmpdepfile" "$depfile"
;;
gcc)
## There are various ways to get dependency output from gcc. Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
## up in a subdir. Having to rename by hand is ugly.
## (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
## -MM, not -M (despite what the docs say).
## - Using -M directly means running the compiler twice (even worse
## than renaming).
if test -z "$gccflag"; then
gccflag=-MD,
fi
"$@" -Wp,"$gccflag$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
## The second -e expression handles DOS-style file names with drive letters.
sed -e 's/^[^:]*: / /' \
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the `deleted header file' problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header). We avoid this by adding
## dummy dependencies for each header file. Too bad gcc doesn't do
## this for us directly.
tr ' ' '
' < "$tmpdepfile" |
## Some versions of gcc put a space before the `:'. On the theory
## that the space means something, we add a space to the output as
## well.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
sgi)
if test "$libtool" = yes; then
"$@" "-Wp,-MDupdate,$tmpdepfile"
else
"$@" -MDupdate "$tmpdepfile"
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
echo "$object : \\" > "$depfile"
# Clip off the initial element (the dependent). Don't try to be
# clever and replace this with sed code, as IRIX sed won't handle
# lines with more than a fixed number of characters (4096 in
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
# the IRIX cc adds comments like `#:fec' to the end of the
# dependency line.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
tr '
' ' ' >> $depfile
echo >> $depfile
# The second pass generates a dummy entry for each header file.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> $depfile
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. In older versions, this file always lives in the
# current directory. Also, the AIX compiler puts `$object:' at the
# start of each line; $object doesn't have directory information.
# Version 6 uses the directory in both cases.
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
tmpdepfile="$stripped.u"
if test "$libtool" = yes; then
"$@" -Wc,-M
else
"$@" -M
fi
stat=$?
if test -f "$tmpdepfile"; then :
else
stripped=`echo "$stripped" | sed 's,^.*/,,'`
tmpdepfile="$stripped.u"
fi
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
if test -f "$tmpdepfile"; then
outname="$stripped.o"
# Each line is of the form `foo.o: dependent.h'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
icc)
# Intel's C compiler understands `-MD -MF file'. However on
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
# ICC 7.0 will fill foo.d with something like
# foo.o: sub/foo.c
# foo.o: sub/foo.h
# which is wrong. We want:
# sub/foo.o: sub/foo.c
# sub/foo.o: sub/foo.h
# sub/foo.c:
# sub/foo.h:
# ICC 7.1 will output
# foo.o: sub/foo.c sub/foo.h
# and will wrap long lines using \ :
# foo.o: sub/foo.c ... \
# sub/foo.h ... \
# ...
"$@" -MD -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
# Each line is of the form `foo.o: dependent.h',
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
# Some versions of the HPUX 10.20 sed can't process this invocation
# correctly. Breaking it into two sed invocations is a workaround.
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
# dependencies in `foo.d' instead, so we check for that too.
# Subdirectories are respected.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
tmpdepfile1="$dir.libs/$base.lo.d"
tmpdepfile2="$dir.libs/$base.d"
"$@" -Wc,-MD
else
tmpdepfile1="$dir$base.o.d"
tmpdepfile2="$dir$base.d"
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2"
exit $stat
fi
if test -f "$tmpdepfile1"; then
tmpdepfile="$tmpdepfile1"
else
tmpdepfile="$tmpdepfile2"
fi
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
# That's a tab and a space in the [].
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
#nosideeffect)
# This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones.
dashmstdout)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
test -z "$dashmflag" && dashmflag=-M
# Require at least two characters before searching for `:'
# in the target name. This is to cope with DOS-style filenames:
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
"$@" $dashmflag |
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tr ' ' '
' < "$tmpdepfile" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
dashXmstdout)
# This case only exists to satisfy depend.m4. It is never actually
# run, as this mode is specially recognized in the preamble.
exit 1
;;
makedepend)
"$@" || exit $?
# Remove any Libtool call
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# X makedepend
shift
cleared=no
for arg in "$@"; do
case $cleared in
no)
set ""; shift
cleared=yes ;;
esac
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift ;;
# Strip any option that makedepend may not understand. Remove
# the object too, otherwise makedepend will parse it as a source file.
-*|$object)
;;
*)
set fnord "$@" "$arg"; shift ;;
esac
done
obj_suffix="`echo $object | sed 's/^.*\././'`"
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
sed '1,2d' "$tmpdepfile" | tr ' ' '
' | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile" "$tmpdepfile".bak
;;
cpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
"$@" -E |
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
cat < "$tmpdepfile" >> "$depfile"
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvisualcpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
"$@" || exit $?
IFS=" "
for arg
do
case "$arg" in
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@"
shift
shift
;;
*)
set fnord "$@" "$arg"
shift
shift
;;
esac
done
"$@" -E |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
echo " " >> "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile"
;;
none)
exec "$@"
;;
*)
echo "Unknown depmode $depmode" 1>&2
exit 1
;;
esac
exit 0
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

316
tvmet-1.7.1/config/install-sh Executable file
View File

@ -0,0 +1,316 @@
#!/bin/sh
# install - install a program, script, or datafile
scriptversion=2004-02-15.20
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
#
# Copyright (C) 1994 X Consortium
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of the X Consortium shall not
# be used in advertising or otherwise to promote the sale, use or other deal-
# ings in this Software without prior written authorization from the X Consor-
# tium.
#
#
# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
transformbasename=
transform_arg=
instcmd="$mvprog"
chmodcmd="$chmodprog 0755"
chowncmd=
chgrpcmd=
stripcmd=
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=
dst=
dir_arg=
usage="Usage: $0 [OPTION]... SRCFILE DSTFILE
or: $0 [OPTION]... SRCFILES... DIRECTORY
or: $0 -d DIRECTORIES...
In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
In the second, create the directory path DIR.
Options:
-b=TRANSFORMBASENAME
-c copy source (using $cpprog) instead of moving (using $mvprog).
-d create directories instead of installing files.
-g GROUP $chgrp installed files to GROUP.
-m MODE $chmod installed files to MODE.
-o USER $chown installed files to USER.
-s strip installed files (using $stripprog).
-t=TRANSFORM
--help display this help and exit.
--version display version info and exit.
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
"
while test -n "$1"; do
case $1 in
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
shift
continue;;
-c) instcmd=$cpprog
shift
continue;;
-d) dir_arg=true
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
--help) echo "$usage"; exit 0;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-s) stripcmd=$stripprog
shift
continue;;
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
shift
continue;;
--version) echo "$0 $scriptversion"; exit 0;;
*) # When -d is used, all remaining arguments are directories to create.
test -n "$dir_arg" && break
# Otherwise, the last argument is the destination. Remove it from $@.
for arg
do
if test -n "$dstarg"; then
# $@ is not empty: it contains at least $arg.
set fnord "$@" "$dstarg"
shift # fnord
fi
shift # arg
dstarg=$arg
done
break;;
esac
done
if test -z "$1"; then
if test -z "$dir_arg"; then
echo "$0: no input file specified." >&2
exit 1
fi
# It's OK to call `install-sh -d' without argument.
# This can happen when creating conditional directories.
exit 0
fi
for src
do
# Protect names starting with `-'.
case $src in
-*) src=./$src ;;
esac
if test -n "$dir_arg"; then
dst=$src
src=
if test -d "$dst"; then
instcmd=:
chmodcmd=
else
instcmd=$mkdirprog
fi
else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if test ! -f "$src" && test ! -d "$src"; then
echo "$0: $src does not exist." >&2
exit 1
fi
if test -z "$dstarg"; then
echo "$0: no destination specified." >&2
exit 1
fi
dst=$dstarg
# Protect names starting with `-'.
case $dst in
-*) dst=./$dst ;;
esac
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
dst=$dst/`basename "$src"`
fi
fi
# This sed command emulates the dirname command.
dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# Skip lots of stat calls in the usual case.
if test ! -d "$dstdir"; then
defaultIFS='
'
IFS="${IFS-$defaultIFS}"
oIFS=$IFS
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS=$oIFS
pathcomp=
while test $# -ne 0 ; do
pathcomp=$pathcomp$1
shift
if test ! -d "$pathcomp"; then
$mkdirprog "$pathcomp" || lasterr=$?
# mkdir can fail with a `File exist' error in case several
# install-sh are creating the directory concurrently. This
# is OK.
test ! -d "$pathcomp" && { (exit ${lasterr-1}); exit; }
fi
pathcomp=$pathcomp/
done
fi
if test -n "$dir_arg"; then
$doit $instcmd "$dst" \
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
else
# If we're going to rename the final executable, determine the name now.
if test -z "$transformarg"; then
dstfile=`basename "$dst"`
else
dstfile=`basename "$dst" $transformbasename \
| sed $transformarg`$transformbasename
fi
# don't allow the sed command to completely eliminate the filename.
test -z "$dstfile" && dstfile=`basename "$dst"`
# Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/_inst.$$_
rmtmp=$dstdir/_rm.$$_
# Trap to clean up those temp files at exit.
trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
trap '(exit $?); exit' 1 2 13 15
# Move or copy the file name to the temp name
$doit $instcmd "$src" "$dsttmp" &&
# and set any options; do chmod last to preserve setuid bits.
#
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command.
#
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
# Now remove or move aside any old file at destination location. We
# try this two ways since rm can't unlink itself on some systems and
# the destination file might be busy for other reasons. In this case,
# the final cleanup might fail but the new file should still install
# successfully.
{
if test -f "$dstdir/$dstfile"; then
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
|| {
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
(exit 1); exit
}
else
:
fi
} &&
# Now rename the file to the real destination.
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
fi || { (exit 1); exit; }
done
# The final little trick to "correctly" pass the exit status to the exit trap.
{
(exit 0); exit
}
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

6422
tvmet-1.7.1/config/ltmain.sh Normal file

File diff suppressed because it is too large Load Diff

360
tvmet-1.7.1/config/missing Executable file
View File

@ -0,0 +1,360 @@
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
scriptversion=2003-09-02.23
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003
# Free Software Foundation, Inc.
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
if test $# -eq 0; then
echo 1>&2 "Try \`$0 --help' for more information"
exit 1
fi
run=:
# In the cases where this matters, `missing' is being run in the
# srcdir already.
if test -f configure.ac; then
configure_ac=configure.ac
else
configure_ac=configure.in
fi
msg="missing on your system"
case "$1" in
--run)
# Try to run requested program, and just exit if it succeeds.
run=
shift
"$@" && exit 0
# Exit code 63 means version mismatch. This often happens
# when the user try to use an ancient version of a tool on
# a file that requires a minimum version. In this case we
# we should proceed has if the program had been absent, or
# if --run hadn't been passed.
if test $? = 63; then
run=:
msg="probably too old"
fi
;;
esac
# If it does not exist, or fails to run (possibly an outdated version),
# try to emulate it.
case "$1" in
-h|--h|--he|--hel|--help)
echo "\
$0 [OPTION]... PROGRAM [ARGUMENT]...
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
error status if there is no known handling for PROGRAM.
Options:
-h, --help display this help and exit
-v, --version output version information and exit
--run try to run the given command, and emulate it if it fails
Supported PROGRAM values:
aclocal touch file \`aclocal.m4'
autoconf touch file \`configure'
autoheader touch file \`config.h.in'
automake touch all \`Makefile.in' files
bison create \`y.tab.[ch]', if possible, from existing .[ch]
flex create \`lex.yy.c', if possible, from existing .c
help2man touch the output file
lex create \`lex.yy.c', if possible, from existing .c
makeinfo touch the output file
tar try tar, gnutar, gtar, then tar without non-portable flags
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
Send bug reports to <bug-automake@gnu.org>."
;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "missing $scriptversion (GNU Automake)"
;;
-*)
echo 1>&2 "$0: Unknown \`$1' option"
echo 1>&2 "Try \`$0 --help' for more information"
exit 1
;;
aclocal*)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
to install the \`Automake' and \`Perl' packages. Grab them from
any GNU archive site."
touch aclocal.m4
;;
autoconf)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`${configure_ac}'. You might want to install the
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
archive site."
touch configure
;;
autoheader)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`acconfig.h' or \`${configure_ac}'. You might want
to install the \`Autoconf' and \`GNU m4' packages. Grab them
from any GNU archive site."
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
test -z "$files" && files="config.h"
touch_files=
for f in $files; do
case "$f" in
*:*) touch_files="$touch_files "`echo "$f" |
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
*) touch_files="$touch_files $f.in";;
esac
done
touch $touch_files
;;
automake*)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
You might want to install the \`Automake' and \`Perl' packages.
Grab them from any GNU archive site."
find . -type f -name Makefile.am -print |
sed 's/\.am$/.in/' |
while read f; do touch "$f"; done
;;
autom4te)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is needed, but is $msg.
You might have modified some files without having the
proper tools for further handling them.
You can get \`$1' as part of \`Autoconf' from any GNU
archive site."
file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
if test -f "$file"; then
touch $file
else
test -z "$file" || exec >$file
echo "#! /bin/sh"
echo "# Created by GNU Automake missing as a replacement of"
echo "# $ $@"
echo "exit 0"
chmod +x $file
exit 1
fi
;;
bison|yacc)
echo 1>&2 "\
WARNING: \`$1' $msg. You should only need it if
you modified a \`.y' file. You may need the \`Bison' package
in order for those modifications to take effect. You can get
\`Bison' from any GNU archive site."
rm -f y.tab.c y.tab.h
if [ $# -ne 1 ]; then
eval LASTARG="\${$#}"
case "$LASTARG" in
*.y)
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" y.tab.c
fi
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" y.tab.h
fi
;;
esac
fi
if [ ! -f y.tab.h ]; then
echo >y.tab.h
fi
if [ ! -f y.tab.c ]; then
echo 'main() { return 0; }' >y.tab.c
fi
;;
lex|flex)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a \`.l' file. You may need the \`Flex' package
in order for those modifications to take effect. You can get
\`Flex' from any GNU archive site."
rm -f lex.yy.c
if [ $# -ne 1 ]; then
eval LASTARG="\${$#}"
case "$LASTARG" in
*.l)
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" lex.yy.c
fi
;;
esac
fi
if [ ! -f lex.yy.c ]; then
echo 'main() { return 0; }' >lex.yy.c
fi
;;
help2man)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a dependency of a manual page. You may need the
\`Help2man' package in order for those modifications to take
effect. You can get \`Help2man' from any GNU archive site."
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
if test -z "$file"; then
file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
fi
if [ -f "$file" ]; then
touch $file
else
test -z "$file" || exec >$file
echo ".ab help2man is required to generate this page"
exit 1
fi
;;
makeinfo)
if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
# We have makeinfo, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a \`.texi' or \`.texinfo' file, or any other file
indirectly affecting the aspect of the manual. The spurious
call might also be the consequence of using a buggy \`make' (AIX,
DU, IRIX). You might want to install the \`Texinfo' package or
the \`GNU make' package. Grab either from any GNU archive site."
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
if test -z "$file"; then
file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
fi
touch $file
;;
tar)
shift
if test -n "$run"; then
echo 1>&2 "ERROR: \`tar' requires --run"
exit 1
fi
# We have already tried tar in the generic part.
# Look for gnutar/gtar before invocation to avoid ugly error
# messages.
if (gnutar --version > /dev/null 2>&1); then
gnutar "$@" && exit 0
fi
if (gtar --version > /dev/null 2>&1); then
gtar "$@" && exit 0
fi
firstarg="$1"
if shift; then
case "$firstarg" in
*o*)
firstarg=`echo "$firstarg" | sed s/o//`
tar "$firstarg" "$@" && exit 0
;;
esac
case "$firstarg" in
*h*)
firstarg=`echo "$firstarg" | sed s/h//`
tar "$firstarg" "$@" && exit 0
;;
esac
fi
echo 1>&2 "\
WARNING: I can't seem to be able to run \`tar' with the given arguments.
You may want to install GNU tar or Free paxutils, or check the
command line arguments."
exit 1
;;
*)
echo 1>&2 "\
WARNING: \`$1' is needed, and is $msg.
You might have modified some files without having the
proper tools for further handling them. Check the \`README' file,
it often tells you about the needed prerequisites for installing
this package. You may also peek at any GNU archive site, in case
some other package would contain this missing \`$1' program."
exit 1
;;
esac
exit 0
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

View File

@ -0,0 +1,48 @@
dnl $Id: op_doxygen_doc.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
dnl
dnl OP_DOXYGEN_DOC
dnl
AC_DEFUN([OP_DOXYGEN_DOC],
[
AC_MSG_CHECKING(for documentation)
AC_ARG_ENABLE(docs,
[ --enable-docs build documentation],
[case "$enableval" in
y | yes) CONFIG_DOC=yes ;;
*) unset CONFIG_DOC ;;
esac])
AC_MSG_RESULT([${CONFIG_DOC:-no}])
AC_MSG_CHECKING(whether using LaTeX non-stop mode)
AC_ARG_ENABLE(verbose-latex,
[ --enable-verbose-latex Uses LaTeX non-stop mode],
[case "$enableval" in
y | yes) CONFIG_DOC_LATEX_NONSTOP=yes ;;
*) unset CONFIG_DOC_LATEX_NONSTOP ;;
esac])
AC_MSG_RESULT(${CONFIG_DOC_LATEX_NONSTOP:-no})
if test x${CONFIG_DOC_LATEX_NONSTOP} = xyes; then
LATEX_BATCHMODE=NO
LATEX_MODE=nonstopmode
else
LATEX_BATCHMODE=YES
LATEX_MODE=batchmode
fi
AC_CHECK_PROG(DOXYGEN, doxygen, doxygen)
if test x${CONFIG_DOC} = xyes -a x"$DOXYGEN" = x; then
AC_MSG_ERROR([missing the doxygen tools to generate the documentation.])
fi
AC_CHECK_PROG(DOXYGEN_HAVE_DOT, dot, yes, no)
AM_CONDITIONAL(CONFIG_DOC,[test x"$CONFIG_DOC" = xyes])
dnl force docs
dnl AM_CONDITIONAL(CONFIG_DOC, [test x=x])
AC_SUBST(DOXYGEN)
AC_SUBST(DOXYGEN_HAVE_DOT)
AC_SUBST(LATEX_BATCHMODE)
AC_SUBST(LATEX_MODE)
])

23174
tvmet-1.7.1/configure vendored Executable file

File diff suppressed because it is too large Load Diff

342
tvmet-1.7.1/configure.ac Normal file
View File

@ -0,0 +1,342 @@
dnl $Id: configure.ac,v 1.47 2005/04/26 15:07:00 opetzold Exp $
dnl Configure script for the Tiny Vector Matrix Expression Template Library
dnl Process this file with autoconf to produce a configure script.
dnl autoconf 2.50 or higher to rebuild aclocal.m4, because the
dnl AC_CREATE_PREFIX_CONFIG_H macro needs the AS_DIRNAME macro.
AC_PREREQ(2.59)
dnl Copy revision stamp into the `configure' script,
AC_REVISION($Revision: 1.47 $)
dnl Disable caching.
define([AC_CACHE_LOAD], )
define([AC_CACHE_SAVE], )
dnl Process this file with autoconf to produce a configure script.
AC_INIT([tvmet],[1.7.1],[opetzold@users.sourceforge.net])
dnl inform about
AC_MSG_RESULT([Configure Tiny Vector Matrix using Expression Templates library AC_PACKAGE_VERSION])
dnl config and versioning, the config.h header is in config - we use a prefixed
dnl config header, see below
AC_CONFIG_AUX_DIR(config)
AC_CONFIG_HEADERS([config/config.h])
dnl Getting the Canonical System Type
AC_CANONICAL_HOST
dnl require gnu style, automake 1.8 or better, etc.
AM_INIT_AUTOMAKE([gnu 1.8 no-define dist-bzip2])
dnl --enable-maintainer-mode for configure
AM_MAINTAINER_MODE
# Declare variables which we want substituted in the Makefile.in's
AC_SUBST(CXX_OPTIMIZE_FLAGS)
AC_SUBST(CXX_DEBUG_FLAGS)
AC_SUBST(CXX_WARN_FLAGS)
dnl Manual configuration options of oopattern.
AC_ARG_ENABLE(tvmet, [
Options of tvmet:])
dnl Process command-line arguments for compiler (parts borrowed from blitz++)
AC_MSG_CHECKING([for compiler])
AC_ARG_WITH(cxx,
[ --with-cxx=compiler set specific C++ compiler and options (e.g. g++ (default), KCC, icc, pgCC)],
[case "$withval" in
KCC*) # KAI C++ http://www.kai.com/
AC_MSG_RESULT([KAI C++])
CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE +K3 -O3 -fast --inline_keyword_space_time=10000"
CXX_DEBUG_FLAGS="-g +K0 -DTVMET_DEBUG"
CXX_WARN_FLAGS=""
;;
g++*|gcc*) # gcc http://gcc.gnu.org/
AC_MSG_RESULT([GNU C++])
AC_SET_COMPILER($withval,"g++","")
CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE -O2 -finline-limit=5000 -ftemplate-depth-200 -fomit-frame-pointer"
CXX_DEBUG_FLAGS="-g -O1 -DTVMET_DEBUG"
CXX_WARN_FLAGS="-W -Wall -Winline"
# paranoia on older gcc versions
gxx_version=`$CXX -v 2>&1 | grep "^.*g.. version" | \
sed -e 's/^.*g.. version *//' -e 's/cygnus-//' -e 's/egcs-//'`
case "$gxx_version" in
1.* | 2.[[0123456789]].*)
AC_MSG_ERROR([g++ version $gxx_version will probably fail to compile tvmet])
;;
esac
;;
icc) # Intel C++ compiler http://www.intel.com/
AC_MSG_RESULT([Intel C++])
AC_SET_COMPILER($withval,"icc","")
CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE -O2 -fp_port -Qoption,c,-ip_ninl_max_total_stats=3000"
CXX_DEBUG_FLAGS="-g -O0 -DTVMET_DEBUG"
CXX_WARN_FLAGS="-Wall"
;;
pgCC*) # Portland group http://www.pgroup.com/
AC_MSG_RESULT([Portland Group C++])
AC_SET_COMPILER($withval,"pgCC","")
CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE -O4 -Mnoframe -Mnodepchk -Minline=levels:25"
CXX_DEBUG_FLAGS="-g -O0 -DTVMET_DEBUG"
CXX_WARN_FLAGS=""
;;
*)
AC_MSG_WARN([--with-cxx: unknown c++ compiler $withval])
;;
esac],[
AC_MSG_RESULT([GNU C++ (default)])
AC_SET_COMPILER($withval,"g++","")
CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE -O2 -finline-limit=5000 -ftemplate-depth-200 -fomit-frame-pointer"
CXX_DEBUG_FLAGS="-g -O1 -DTVMET_DEBUG"
CXX_WARN_FLAGS="-W -Wall -Winline"
])
dnl Check if the script was called with --enable-optimize, and if so
dnl modify the compilation flags.
AC_MSG_CHECKING([for compiler optimizations])
tvmet_optimize=0
AC_ARG_ENABLE(optimize,
[ --enable-optimize enable compiler optimization flags],
[if test "$enableval" = yes; then
AC_MSG_RESULT([yes])
CXXFLAGS="$CXXFLAGS $CXX_OPTIMIZE_FLAGS"
tvmet_optimize=1
else
AC_MSG_RESULT([no])
fi], [
AC_MSG_RESULT([no])
])
dnl Set platform-specific optimization settings
if test $tvmet_optimize -eq 1; then
AC_MSG_CHECKING([for compiler platform-specific optimizations])
case "$build_os" in
*linux*)
case "$CXX" in
g++)
AC_MSG_RESULT([GNU/Linux (CPU=$build_cpu) using GNU GCC])
# specifying -march=cpu-type implies -mcpu=cpu-type.
case "$build_cpu" in
i386|i486)
CXXFLAGS="$CXXFLAGS -malign-double -march=i386"
;;
i586)
CXXFLAGS="$CXXFLAGS -malign-double -march=i586 -msse"
;;
i686)
CXXFLAGS="$CXXFLAGS -malign-double -march=i686 -msse2"
;;
k6*)
CXXFLAGS="$CXXFLAGS -malign-double -march=k6 -m3dnow"
esac
;;
icc)
AC_MSG_RESULT([GNU/Linux (CPU=$build_cpu) using Intel CC])
case "$build_cpu" in
i586)
# Intel Pentium Pro, Intel Pentium II, and Intel Pentium III processors
CXXFLAGS="$CXXFLAGS -tpp6"
;;
i686)
# Intel Pentium 4 processors
CXXFLAGS="$CXXFLAGS -tpp7"
;;
esac
;;
esac
;;
*)
AC_MSG_RESULT([tvmet has not been tuned for this platform])
;;
esac
fi
dnl Check if the script was called with --enable-debug, and if so
dnl modify the compilation flags.
AC_MSG_CHECKING([for compiler debug flags])
AC_ARG_ENABLE(debug,
[ --enable-debug enable compiler debug flags],
[if test "$enableval" = yes; then
AC_MSG_RESULT([yes])
CXXFLAGS="$CXXFLAGS $CXX_DEBUG_FLAGS"
fi], [
AC_MSG_RESULT([no])
])
dnl Check if the script was called with --enable-warnings, and if so
dnl modify the compilation flags.
AC_MSG_CHECKING([for compiler warn flags])
AC_ARG_ENABLE(warnings,
[ --enable-warnings enable compiler warning flags],
[if test "$enableval" = yes; then
AC_MSG_RESULT([yes])
CXXFLAGS="$CXXFLAGS $CXX_WARN_FLAGS"
fi], [
AC_MSG_RESULT([no])
])
dnl doxygen docs
OP_DOXYGEN_DOC
dnl cppunit support
oopattern_config_cppunit=yes
AC_ARG_ENABLE(cppunit,
[ --disable-cppunit disable unit tests using cppunit],
oopattern_config_cppunit=$enableval)
dnl check for cppunit for unit tests
if test x"$oopattern_config_cppunit" = xyes; then
dnl Check if we have libcppunit
AM_PATH_CPPUNIT(1.8.0)
if test "x$no_cppunit" = xyes; then
CONFIG_CPPUNIT=no
else
CONFIG_CPPUNIT=yes
fi
fi
AC_MSG_CHECKING(for libcppunit support)
if test "x${oopattern_config_cppunit}" = xyes -a "x$CONFIG_CPPUNIT" = xyes; then
CONFIG_CPPUNIT=yes
AC_MSG_RESULT([yes])
else
CONFIG_CPPUNIT=no
AC_MSG_RESULT([no])
fi
AM_CONDITIONAL(CONFIG_CPPUNIT,[test x"$CONFIG_CPPUNIT" = xyes])
dnl Checks for programs.
AC_PROG_INSTALL
AC_PROG_MAKE_SET
AC_LANG([C++])
AC_PROG_CXX
AC_PROG_LN_S
dnl don't be confused, we don't build shared/static libs; it's
dnl for the head install process only (for build and install
dnl process from separate build directory)
AC_PROG_LIBTOOL
dnl Checks for libraries.
AC_CHECK_LIB(dl, main)
dnl Checks for header files.
AC_HEADER_STDC
AC_HEADER_STDBOOL dnl for unit tests
AC_CHECK_HEADERS([sys/time.h unistd.h])
# Checks for library functions.
AC_CHECK_FUNCS([floor pow rint sqrt])
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T
AC_STRUCT_TM
AC_C_LONG_DOUBLE
AC_C_LONG_LONG
AC_C_RESTRICT
AC_CXX_HAVE_MUTABLE
AC_CXX_TYPENAME
AC_CXX_PARTIAL_SPECIALIZATION
AC_CXX_NAMESPACES
AC_CXX_HAVE_IEEE_MATH
AC_CXX_HAVE_SYSV_MATH
AC_CXX_HAVE_COMPLEX
AC_CXX_HAVE_COMPLEX_MATH1
AC_CXX_HAVE_COMPLEX_MATH2
dnl create makefiles
AC_CONFIG_FILES([
Makefile
tvmet-config
tvmet.spec
include/Makefile
include/tvmet/Makefile
include/tvmet/config/Makefile
include/tvmet/meta/Makefile
include/tvmet/loop/Makefile
include/tvmet/util/Makefile
include/tvmet/xpr/Makefile
include/tvmet/config/config-vc71.h
doc/Makefile
doc/Doxyfile
doc/footer.html
doc/tvmet.sty
testsuite/Makefile
tests/Makefile
examples/Makefile
benchmark/Makefile
])
AC_CONFIG_COMMANDS([default],[[chmod a+x tvmet-config]],[[]])
AC_OUTPUT
dnl prefixed config header
AC_CREATE_PREFIX_CONFIG_H([include/tvmet/config.h], $PACKAGE, [config/config.h])
dnl -------------------
dnl tvmet's user epilog
dnl -------------------
echo "
Configuration for $PACKAGE $VERSION:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following optional features are enabled:
Source code location : $srcdir
tvmet's unit-tests available : `if test "x$CONFIG_CPPUNIT" = xyes; then echo yes; else echo no; fi`
build documentation : `if test "x$CONFIG_DOC" = xyes; then echo yes; else echo no; fi`
using LaTeX non-stop mode : `if test "x$CONFIG_DOC_LATEX_NONSTOP" = xyes; then echo yes; else echo no; fi`
graphs and diagrams : `if test "x$DOXYGEN_HAVE_DOT" = xyes; then echo -n yes; else echo no; fi`
Install path : $prefix
Compiler Flags used:
CXX : $CXX
CXXFLAGS : $CXXFLAGS
The configure script has generated makefiles for your platform.
You have several options now:
make Depends on configure's flags given, build the docs,
build $PACKAGE $VERSION and run the regression tests.
make docs Makes the docs using doxygen (if enabled).
make check Make the unit tests (if CppUnit available).
make install Install tvmet.
make uninstall Uninstall tvmet.
"

1120
tvmet-1.7.1/doc/Doxyfile.in Normal file

File diff suppressed because it is too large Load Diff

218
tvmet-1.7.1/doc/Makefile.am Normal file
View File

@ -0,0 +1,218 @@
# $Id: Makefile.am,v 1.22 2004/09/16 08:12:13 opetzold Exp $
AM_CXXFLAGS = -O \
-I@top_srcdir@/include -I@top_builddir@/include
DOXY_DOC = \
benchmark.dox \
build.dox \
compiler.dox \
faq.dox \
intro.dox \
license.dox \
links.dox \
misc.dox \
notes.dox \
projects.dox \
usage.dox \
works.dox
HTML_MISC = \
tvmet.css \
header.html footer.html.in
LTEX_MISC = \
tvmet.sty.in
BENCH_FIG = \
axpy.png \
matrix_matrix.png \
matrix_vector.png \
aat.png \
ata.png
EXTRA_DIST = \
$(DOXY_DOC) \
$(HTML_MISC) \
$(LTEX_MISC) \
$(BENCH_FIG)
DISTCLEANFILES = \
Doxyfile doxygen-warning \
footer.html tvmet.sty
# some depencies
Doxyfile: Doxyfile.in
footer.html: footer.html.in
tvmet.sty: tvmet.sty.in
# non-install programs for generating doxygen files
noinst_PROGRAMS = dox_operators dox_functions
dox_operators_SOURCES = dox_operators.cc Util.h
dox_functions_SOURCES = dox_functions.cc Util.h
#
# rules for documentation, if ordered
#
if CONFIG_DOC
#
# file created on the fly
#
DOXY_BUILD = \
changelog.dox \
news.dox \
credits.dox \
install.dox \
operators.dox \
functions.dox
DOXY_HTML_SRC = \
$(DOXY_DOC) \
$(DOXY_BUILD) \
$(patsubst %.in, %, $(HTML_MISC))
DOXY_LTEX_SRC = \
$(patsubst %.in, %, $(LTEX_MISC))
# file creating rules; not needed every time
operators.dox: dox_operators
./dox_operators > operators.dox
functions.dox: dox_functions
./dox_functions > functions.dox
# file creating rules
changelog.dox: @top_srcdir@/ChangeLog
@echo "/** \page changelog ChangeLog" > $@
@echo "\verbatim" >> $@
cat $< >> $@
@echo "\endverbatim" >> $@
@echo "*/" >> $@
news.dox: @top_srcdir@/NEWS
@echo "/** \page news News" > $@
@echo "\verbatim" >> $@
cat $< >> $@
@echo "\endverbatim" >> $@
@echo "*/" >> $@
credits.dox: @top_srcdir@/THANKS
@echo "/** \page credits Credits" > $@
@echo "\verbatim" >> $@
cat $< >> $@
@echo "\endverbatim" >> $@
@echo "*/" >> $@
install.dox: @top_srcdir@/INSTALL
@echo "/** \page basic_install INSTALL" > $@
@echo "\verbatim" >> $@
cat $< >> $@
@echo "\endverbatim" >> $@
@echo "*/" >> $@
#
# doxygen API
#
DOC_API_PDF = $(PACKAGE)-$(VERSION).pdf
all-local: doxygen-api
# need's LaTeX style, since we use an own style for LaTeX
# which is required for generating formulas in HTML too.
# Doxygen LaTeX batchmode doesn't solves the problem right here.
doxygen-html-dir:
@if test ! -d ./html; then mkdir ./html; fi
doxygen-api: doxygen-html-dir Doxyfile $(DOXY_HTML_SRC)
@echo "Making HTML manual"
@cp @builddir@/tvmet.sty ./html/
@DOXYGEN@ $(DOXYGEN_OPTS)
@$(RM) -f ./html/tvmet.sty
#
# doxygen LaTeX API
#
TEXINPUTS_PATH=$(TEXINPUTS):$(top_builddir)
noinst_DATA = $(DOC_API_PDF)
all-local: $(noinst_DATA)
dvi-local:
ps-local:
pdf-local: $(DOC_API_PDF)
$(DOC_API_PDF): Doxyfile $(DOXY_LTEX_SRC)
@if test -d ./latex; then \
echo "Making PDF manual"; \
if test -f $@; then \
$(RM) $@; \
fi; \
TEXINPUTS=$(TEXINPUTS_PATH) $(MAKE) -C ./latex refman.pdf; \
$(LN_S) ./latex/refman.pdf $@; \
fi
#
# misc hooks
#
distclean-local:
@rm -f $(DOXY_BUILD)
@if test -f $(DOC_API_PDF); then \
$(RM) -f $(DOC_API_PDF); \
fi
@if test -d html; then \
$(RM) -rf html; \
fi
@if test -d latex; then \
$(RM) -rf latex; \
fi
@if test -d rtf; then \
$(RM) -rf rtf; \
fi
@if test -d man; then \
$(RM) -rf man; \
fi
doc-dist: doxygen-api
echo "please wait while archiving the html docs."; \
tar cf - -C ./html . | bzip2 --best -c > $(PACKAGE)-docs-$(VERSION).tar.bz2
# where to install all html documents
TVMET_DOC_DIR = $(datadir)/doc/$(PACKAGE)-$(VERSION)
# Automake's "distcheck" is sensitive to having files left over
# after "make uninstall", so we have to clean up the install hook.
uninstall-local:
@if test -d $(TVMET_DOC_DIR); then \
rm -rf $(TVMET_DOC_DIR); \
fi
# Install hooks
make-install-dirs:
@if test '!' -d $(TVMET_DOC_DIR); then \
$(mkinstalldirs) $(TVMET_DOC_DIR); \
fi
install-data-hook: make-install-dirs
@echo Installing documentations into $(TVMET_DOC_DIR)
@echo "install html"
@$(INSTALL_DATA) @top_builddir@/doc/html/* $(TVMET_DOC_DIR)
else
doc-dist:
install-data-hook:
endif # CONFIG_DOC
# --------------------------------------------------------
# in progress:
# make refman twoside
twoside:
class=`cat latex/refman.tex | grep documentclass`
newclass=`echo $$class | sed -e 's/twoside,//' -e 's/\[/\[twoside,/'`
@echo "class:" $$class
@echo "newclass:" $$newclass
cat latex/refman.tex | sed 's/$$class/$$newclass/' >foo

687
tvmet-1.7.1/doc/Makefile.in Normal file
View File

@ -0,0 +1,687 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# $Id: Makefile.am,v 1.22 2004/09/16 08:12:13 opetzold Exp $
SOURCES = $(dox_functions_SOURCES) $(dox_operators_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_triplet = @host@
noinst_PROGRAMS = dox_operators$(EXEEXT) dox_functions$(EXEEXT)
subdir = doc
DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/footer.html.in \
$(srcdir)/tvmet.sty.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
$(top_srcdir)/config/ac_cxx_have_complex.m4 \
$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
$(top_srcdir)/config/ac_cxx_typename.m4 \
$(top_srcdir)/config/ac_set_compiler.m4 \
$(top_srcdir)/config/op_doxygen_doc.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
CONFIG_HEADER = $(top_builddir)/config/config.h
CONFIG_CLEAN_FILES = Doxyfile footer.html tvmet.sty
PROGRAMS = $(noinst_PROGRAMS)
am_dox_functions_OBJECTS = dox_functions.$(OBJEXT)
dox_functions_OBJECTS = $(am_dox_functions_OBJECTS)
dox_functions_LDADD = $(LDADD)
am_dox_operators_OBJECTS = dox_operators.$(OBJEXT)
dox_operators_OBJECTS = $(am_dox_operators_OBJECTS)
dox_operators_LDADD = $(LDADD)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/dox_functions.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/dox_operators.Po
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(dox_functions_SOURCES) $(dox_operators_SOURCES)
DIST_SOURCES = $(dox_functions_SOURCES) $(dox_operators_SOURCES)
DATA = $(noinst_DATA)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
CPPUNIT_LIBS = @CPPUNIT_LIBS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DOXYGEN = @DOXYGEN@
DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LATEX_BATCHMODE = @LATEX_BATCHMODE@
LATEX_MODE = @LATEX_MODE@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
AM_CXXFLAGS = -O \
-I@top_srcdir@/include -I@top_builddir@/include
DOXY_DOC = \
benchmark.dox \
build.dox \
compiler.dox \
faq.dox \
intro.dox \
license.dox \
links.dox \
misc.dox \
notes.dox \
projects.dox \
usage.dox \
works.dox
HTML_MISC = \
tvmet.css \
header.html footer.html.in
LTEX_MISC = \
tvmet.sty.in
BENCH_FIG = \
axpy.png \
matrix_matrix.png \
matrix_vector.png \
aat.png \
ata.png
EXTRA_DIST = \
$(DOXY_DOC) \
$(HTML_MISC) \
$(LTEX_MISC) \
$(BENCH_FIG)
DISTCLEANFILES = \
Doxyfile doxygen-warning \
footer.html tvmet.sty
dox_operators_SOURCES = dox_operators.cc Util.h
dox_functions_SOURCES = dox_functions.cc Util.h
#
# rules for documentation, if ordered
#
#
# file created on the fly
#
@CONFIG_DOC_TRUE@DOXY_BUILD = \
@CONFIG_DOC_TRUE@ changelog.dox \
@CONFIG_DOC_TRUE@ news.dox \
@CONFIG_DOC_TRUE@ credits.dox \
@CONFIG_DOC_TRUE@ install.dox \
@CONFIG_DOC_TRUE@ operators.dox \
@CONFIG_DOC_TRUE@ functions.dox
@CONFIG_DOC_TRUE@DOXY_HTML_SRC = \
@CONFIG_DOC_TRUE@ $(DOXY_DOC) \
@CONFIG_DOC_TRUE@ $(DOXY_BUILD) \
@CONFIG_DOC_TRUE@ $(patsubst %.in, %, $(HTML_MISC))
@CONFIG_DOC_TRUE@DOXY_LTEX_SRC = \
@CONFIG_DOC_TRUE@ $(patsubst %.in, %, $(LTEX_MISC))
#
# doxygen API
#
@CONFIG_DOC_TRUE@DOC_API_PDF = $(PACKAGE)-$(VERSION).pdf
#
# doxygen LaTeX API
#
@CONFIG_DOC_TRUE@TEXINPUTS_PATH = $(TEXINPUTS):$(top_builddir)
@CONFIG_DOC_TRUE@noinst_DATA = $(DOC_API_PDF)
# where to install all html documents
@CONFIG_DOC_TRUE@TVMET_DOC_DIR = $(datadir)/doc/$(PACKAGE)-$(VERSION)
all: all-am
.SUFFIXES:
.SUFFIXES: .cc .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
footer.html: $(top_builddir)/config.status $(srcdir)/footer.html.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
tvmet.sty: $(top_builddir)/config.status $(srcdir)/tvmet.sty.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
clean-noinstPROGRAMS:
@list='$(noinst_PROGRAMS)'; for p in $$list; do \
f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
echo " rm -f $$p $$f"; \
rm -f $$p $$f ; \
done
dox_functions$(EXEEXT): $(dox_functions_OBJECTS) $(dox_functions_DEPENDENCIES)
@rm -f dox_functions$(EXEEXT)
$(CXXLINK) $(dox_functions_LDFLAGS) $(dox_functions_OBJECTS) $(dox_functions_LDADD) $(LIBS)
dox_operators$(EXEEXT): $(dox_operators_OBJECTS) $(dox_operators_DEPENDENCIES)
@rm -f dox_operators$(EXEEXT)
$(CXXLINK) $(dox_operators_LDFLAGS) $(dox_operators_OBJECTS) $(dox_operators_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dox_functions.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dox_operators.Po@am__quote@
.cc.o:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
.cc.obj:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.cc.lo:
@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS) $(DATA) all-local
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-local distclean-tags
dvi: dvi-am
dvi-am: dvi-local
html: html-am
info: info-am
info-am:
install-data-am:
@$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) install-data-hook
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am: pdf-local
ps: ps-am
ps-am: ps-local
uninstall-am: uninstall-info-am uninstall-local
.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
clean-generic clean-libtool clean-noinstPROGRAMS ctags \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-local distclean-tags distdir dvi \
dvi-am dvi-local html html-am info info-am install install-am \
install-data install-data-am install-exec install-exec-am \
install-info install-info-am install-man install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am pdf-local \
ps ps-am ps-local tags uninstall uninstall-am \
uninstall-info-am uninstall-local
# some depencies
Doxyfile: Doxyfile.in
footer.html: footer.html.in
tvmet.sty: tvmet.sty.in
# file creating rules; not needed every time
@CONFIG_DOC_TRUE@operators.dox: dox_operators
@CONFIG_DOC_TRUE@ ./dox_operators > operators.dox
@CONFIG_DOC_TRUE@functions.dox: dox_functions
@CONFIG_DOC_TRUE@ ./dox_functions > functions.dox
# file creating rules
@CONFIG_DOC_TRUE@changelog.dox: @top_srcdir@/ChangeLog
@CONFIG_DOC_TRUE@ @echo "/** \page changelog ChangeLog" > $@
@CONFIG_DOC_TRUE@ @echo "\verbatim" >> $@
@CONFIG_DOC_TRUE@ cat $< >> $@
@CONFIG_DOC_TRUE@ @echo "\endverbatim" >> $@
@CONFIG_DOC_TRUE@ @echo "*/" >> $@
@CONFIG_DOC_TRUE@news.dox: @top_srcdir@/NEWS
@CONFIG_DOC_TRUE@ @echo "/** \page news News" > $@
@CONFIG_DOC_TRUE@ @echo "\verbatim" >> $@
@CONFIG_DOC_TRUE@ cat $< >> $@
@CONFIG_DOC_TRUE@ @echo "\endverbatim" >> $@
@CONFIG_DOC_TRUE@ @echo "*/" >> $@
@CONFIG_DOC_TRUE@credits.dox: @top_srcdir@/THANKS
@CONFIG_DOC_TRUE@ @echo "/** \page credits Credits" > $@
@CONFIG_DOC_TRUE@ @echo "\verbatim" >> $@
@CONFIG_DOC_TRUE@ cat $< >> $@
@CONFIG_DOC_TRUE@ @echo "\endverbatim" >> $@
@CONFIG_DOC_TRUE@ @echo "*/" >> $@
@CONFIG_DOC_TRUE@install.dox: @top_srcdir@/INSTALL
@CONFIG_DOC_TRUE@ @echo "/** \page basic_install INSTALL" > $@
@CONFIG_DOC_TRUE@ @echo "\verbatim" >> $@
@CONFIG_DOC_TRUE@ cat $< >> $@
@CONFIG_DOC_TRUE@ @echo "\endverbatim" >> $@
@CONFIG_DOC_TRUE@ @echo "*/" >> $@
@CONFIG_DOC_TRUE@all-local: doxygen-api
# need's LaTeX style, since we use an own style for LaTeX
# which is required for generating formulas in HTML too.
# Doxygen LaTeX batchmode doesn't solves the problem right here.
@CONFIG_DOC_TRUE@doxygen-html-dir:
@CONFIG_DOC_TRUE@ @if test ! -d ./html; then mkdir ./html; fi
@CONFIG_DOC_TRUE@doxygen-api: doxygen-html-dir Doxyfile $(DOXY_HTML_SRC)
@CONFIG_DOC_TRUE@ @echo "Making HTML manual"
@CONFIG_DOC_TRUE@ @cp @builddir@/tvmet.sty ./html/
@CONFIG_DOC_TRUE@ @DOXYGEN@ $(DOXYGEN_OPTS)
@CONFIG_DOC_TRUE@ @$(RM) -f ./html/tvmet.sty
@CONFIG_DOC_TRUE@all-local: $(noinst_DATA)
@CONFIG_DOC_TRUE@dvi-local:
@CONFIG_DOC_TRUE@ps-local:
@CONFIG_DOC_TRUE@pdf-local: $(DOC_API_PDF)
@CONFIG_DOC_TRUE@$(DOC_API_PDF): Doxyfile $(DOXY_LTEX_SRC)
@CONFIG_DOC_TRUE@ @if test -d ./latex; then \
@CONFIG_DOC_TRUE@ echo "Making PDF manual"; \
@CONFIG_DOC_TRUE@ if test -f $@; then \
@CONFIG_DOC_TRUE@ $(RM) $@; \
@CONFIG_DOC_TRUE@ fi; \
@CONFIG_DOC_TRUE@ TEXINPUTS=$(TEXINPUTS_PATH) $(MAKE) -C ./latex refman.pdf; \
@CONFIG_DOC_TRUE@ $(LN_S) ./latex/refman.pdf $@; \
@CONFIG_DOC_TRUE@ fi
#
# misc hooks
#
@CONFIG_DOC_TRUE@distclean-local:
@CONFIG_DOC_TRUE@ @rm -f $(DOXY_BUILD)
@CONFIG_DOC_TRUE@ @if test -f $(DOC_API_PDF); then \
@CONFIG_DOC_TRUE@ $(RM) -f $(DOC_API_PDF); \
@CONFIG_DOC_TRUE@ fi
@CONFIG_DOC_TRUE@ @if test -d html; then \
@CONFIG_DOC_TRUE@ $(RM) -rf html; \
@CONFIG_DOC_TRUE@ fi
@CONFIG_DOC_TRUE@ @if test -d latex; then \
@CONFIG_DOC_TRUE@ $(RM) -rf latex; \
@CONFIG_DOC_TRUE@ fi
@CONFIG_DOC_TRUE@ @if test -d rtf; then \
@CONFIG_DOC_TRUE@ $(RM) -rf rtf; \
@CONFIG_DOC_TRUE@ fi
@CONFIG_DOC_TRUE@ @if test -d man; then \
@CONFIG_DOC_TRUE@ $(RM) -rf man; \
@CONFIG_DOC_TRUE@ fi
@CONFIG_DOC_TRUE@doc-dist: doxygen-api
@CONFIG_DOC_TRUE@ echo "please wait while archiving the html docs."; \
@CONFIG_DOC_TRUE@ tar cf - -C ./html . | bzip2 --best -c > $(PACKAGE)-docs-$(VERSION).tar.bz2
# Automake's "distcheck" is sensitive to having files left over
# after "make uninstall", so we have to clean up the install hook.
@CONFIG_DOC_TRUE@uninstall-local:
@CONFIG_DOC_TRUE@ @if test -d $(TVMET_DOC_DIR); then \
@CONFIG_DOC_TRUE@ rm -rf $(TVMET_DOC_DIR); \
@CONFIG_DOC_TRUE@ fi
# Install hooks
@CONFIG_DOC_TRUE@make-install-dirs:
@CONFIG_DOC_TRUE@ @if test '!' -d $(TVMET_DOC_DIR); then \
@CONFIG_DOC_TRUE@ $(mkinstalldirs) $(TVMET_DOC_DIR); \
@CONFIG_DOC_TRUE@ fi
@CONFIG_DOC_TRUE@install-data-hook: make-install-dirs
@CONFIG_DOC_TRUE@ @echo Installing documentations into $(TVMET_DOC_DIR)
@CONFIG_DOC_TRUE@ @echo "install html"
@CONFIG_DOC_TRUE@ @$(INSTALL_DATA) @top_builddir@/doc/html/* $(TVMET_DOC_DIR)
@CONFIG_DOC_FALSE@doc-dist:
@CONFIG_DOC_FALSE@install-data-hook:
# --------------------------------------------------------
# in progress:
# make refman twoside
twoside:
class=`cat latex/refman.tex | grep documentclass`
newclass=`echo $$class | sed -e 's/twoside,//' -e 's/\[/\[twoside,/'`
@echo "class:" $$class
@echo "newclass:" $$newclass
cat latex/refman.tex | sed 's/$$class/$$newclass/' >foo
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

202
tvmet-1.7.1/doc/Util.h Normal file
View File

@ -0,0 +1,202 @@
/*
* Tiny Vector Matrix Library
* Dense Vector Matrix Libary of Tiny size using Expression Templates
*
* Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: Util.h,v 1.5 2003/12/19 18:01:37 opetzold Exp $
*/
#ifndef TVMET_DOC_UTIL_H
#define TVMET_DOC_UTIL_H
#include <vector>
#include <tvmet/config.h>
struct Function {
Function() { }
virtual ~Function() { }
virtual const char* name() const = 0;
virtual const char* description() const = 0;
virtual bool int_only() const = 0;
static const char* group() { return "_function"; }
static const char* group_unary() { return "_unary_function"; }
static const char* group_binary() { return "_binary_function"; }
template<class Stream> static Stream& doxy_groups(Stream& os) {
os << "/**\n"
<< " * \\defgroup " << group() << " Global Functions\n"
<< " */\n\n";
os << "/**\n"
<< " * \\defgroup " << group_unary() << " Global Unary Functions\n"
<< " * \\ingroup " << group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\defgroup " << group_binary() << " Global Binary Functions\n"
<< " * \\ingroup " << group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\defgroup " << "_trinary_function" << " Global Trinary Functions\n"
<< " * \\ingroup " << group() << "\n"
<< " */\n\n";
return os;
}
};
class BinaryFunction : public Function {
public:
BinaryFunction(const char* s, const char* d, bool i = false)
: m_name(s), m_description(d), m_int_only(i) { }
const char* name() const { return m_name; }
const char* description() const { return m_description; }
const char* group() const { return group_binary(); }
bool int_only() const { return m_int_only; }
private:
const char* m_name;
const char* m_description;
bool m_int_only;
};
class UnaryFunction : public Function {
public:
UnaryFunction(const char* s, const char* d, bool i = false)
: m_name(s), m_description(d), m_int_only(i) { }
virtual ~UnaryFunction() { }
const char* name() const { return m_name; }
const char* description() const { return m_description; }
const char* group() const { return group_unary(); }
bool int_only() const { return m_int_only; }
private:
const char* m_name;
const char* m_description;
bool m_int_only;
};
struct Operator {
Operator() { }
virtual ~Operator() { }
virtual const char* symbol() const = 0;
virtual const char* description() const = 0;
virtual bool int_only() const = 0;
static const char* group() { return "_operator"; }
static const char* group_unary() { return "_unary_operator"; }
static const char* group_binary() { return "_binary_operator"; }
template<class Stream> static Stream& doxy_groups(Stream& os) {
os << "/**\n"
<< " * \\defgroup " << group() << " Global Operators\n"
<< " */\n\n";
os << "/**\n"
<< " * \\defgroup " << group_binary() << " Global Binary Operators\n"
<< " * \\ingroup " << group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\defgroup " << group_unary() << " Global Unary Operators\n"
<< " * \\ingroup " << group() << "\n"
<< " */\n\n";
return os;
}
};
class BinaryOperator : public Operator {
public:
BinaryOperator(const char* s, const char* d, bool i = false)
: m_symbol(s), m_description(d), m_int_only(i) { }
virtual ~BinaryOperator() { }
const char* symbol() const { return m_symbol; }
const char* description() const { return m_description; }
const char* group() const { return group_binary(); }
bool int_only() const { return m_int_only; }
private:
const char* m_symbol;
const char* m_description;
bool m_int_only;
};
class UnaryOperator : public Operator {
public:
UnaryOperator(const char* s, const char* d, bool i = false)
: m_symbol(s), m_description(d), m_int_only(i) { }
virtual ~UnaryOperator() { }
const char* symbol() const { return m_symbol; }
const char* description() const { return m_description; }
const char* group() const { return group_unary(); }
bool int_only() const { return m_int_only; }
private:
const char* m_symbol;
const char* m_description;
bool m_int_only;
};
class DataType {
public:
DataType(const char* s, const char* d, bool i = false)
: m_name(s), m_description(d), m_is_int(i){ }
const char* name() const { return m_name; }
const char* description() const { return m_description; }
bool is_int() const { return m_is_int; }
private:
const char* m_name;
const char* m_description;
bool m_is_int;
};
class Type
{
public:
Type() {
datatypes.push_back( DataType("int", "int", true) );
datatypes.push_back( DataType("float", "float") );
datatypes.push_back( DataType("double", "double") );
#ifdef TVMET_HAVE_LONG_DOUBLE
datatypes.push_back( DataType("long double", "long double") );
#endif // HAVE_LONG_DOUBLE
#ifdef TVMET_HAVE_COMPLEX
datatypes.push_back( DataType("const std::complex<T>&", "std::complex<T>") );
#endif // HAVE_COMPLEX
}
virtual ~Type() { }
public:
template<class Stream>
Stream& header(Stream& os) const {
os << "namespace tvmet {\n\n";
return os;
}
template<class Stream>
Stream& footer(Stream& os) const {
os << "\n} // namespace tvmet\n\n";
return os;
}
public:
typedef std::vector< DataType >::const_iterator const_iterator;
public:
const_iterator begin() const { return datatypes.begin(); }
const_iterator end() const { return datatypes.end(); }
private:
std::vector< DataType > datatypes;
};
#endif // TVMET_DOC_UTIL_H
// Local Variables:
// mode:C++
// End:

BIN
tvmet-1.7.1/doc/aat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
tvmet-1.7.1/doc/ata.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
tvmet-1.7.1/doc/axpy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,52 @@
/*
* $Id: benchmark.dox,v 1.8 2004/04/10 04:58:35 opetzold Exp $
*/
/**
\page benchmark Benchmark
Prior to version 0.8.0, tvmet had benchmark results listed here. Benchmarking
isn't as easy as had been thought. The compiler's optimizer is very tricky -
even more than I am. 8( To outwit the optimizer takes time - I would rather
put the time into tvmet, itself.
Laurent Plagne has created some benchmarks using tvmet and other libraries,
please have a look at
<a href="http://www.opencascade.org/upload/87">opencascade</a>.
The following benchmarks are done on my
Intel(R) Pentium(R) 4 CPU 2.40GHz
Linux box:
- \ref bench_axpy
- \ref bench_matrix_matrix
- \ref bench_matrix_vector
- \ref bench_aat
- \ref bench_ata
using a patched version of BTL 20030124. The patch is necessary to be able
to compile tvmet due to the high inline level used here. The patch is
distributed with the package.
\section bench_axpy axpy
\image html axpy.png "axpy"
\section bench_matrix_matrix Matrix-Matrix
\image html matrix_matrix.png "Matrix-Matrix"
\section bench_matrix_vector Matrix-Vector
\image html matrix_vector.png "Matrix-Vector"
\section bench_aat MMt
\image html aat.png "M M^t"
\section bench_ata MtM
\image html ata.png "M^t M"
*/
// Local Variables:
// mode:c++
// End:
// LocalWords: BTL GHz Plagne

199
tvmet-1.7.1/doc/build.dox Normal file
View File

@ -0,0 +1,199 @@
/*
* $Id: build.dox,v 1.14 2005/04/07 15:59:19 opetzold Exp $
*/
/**
\page build Download, Configuration, Build and Installation of the library
<p>Contents:</p>
- \ref download
- \ref configure_unix
- \ref install_unix
- \ref install_win
\section download Download tvmet
<p>
You can download %tvmet <a href=http://sourceforge.net/project/showfiles.php?group_id=39733>here</a>.
For the regression tests you will need <a href=http://sourceforge.net/projects/cppunit>CppUnit</a>.
While these tests are not mandatory, they are recommended.
</p>
<p>
For the API documentation you will also need <a href=http://www.doxygen.org>doxygen</a>,
maybe you want a graphical class hierarchy, class graph etc you need
the 'dot' tool of <a href="http://www.graphviz.org/">GraphViz</a>
to draw the miscellaneous graphs.
</p>
\section configure_unix Configure tvmet on unix
See the \ref basic_install file for general informations.
<b>NEW</b> Starting with tvmet version 1.5.0 the configuration options
has been changed!
<dl>
<dt><tt>--enable-optimize</tt></dt>
<dd>This affects the compiler optimization options. Machine specific
compiler flags are switched on as well. The <code>TVMET_OPTIMIZE</code>
symbol is defined, which uses the gcc's
<code>__attribute__((always_inline))</code>.
</dd>
</dl>
<dl>
<dt><tt>--enable-debug</tt></dt>
<dd>Enables debugging mode for %tvmet. This affects the compiler
options and preprocessor definitions. The <code>TVMET_DEBUG</code>
symbol is defined. If you compile %tvmet from another source directory
which defines <code>DEBUG</code>, then <code>TVMET_DEBUG</code> will be
<b>not</b> defined (This behavior differs from release less than 0.6.0).
Please have a look at the \ref debug section of the \ref faq.
</dd>
</dl>
<dl>
<dt><tt>--enable-warnings</tt></dt>
<dd>This affects the compiler warning options. The warning level is on
a high level for default!</dd>
</dl>
<dl>
<dt><tt>--enable-docs</tt></dt>
<dd>Enables generation of API documentation using <a href=http://www.doxygen.org>doxygen</a>.
If the configure scripts founds the <a href="http://www.graphviz.org/">GraphViz</a>
'dot' tool it will be used. Further more an PDF file of the API
will be generated using doxygen too.
</dd>
</dl>
<dl>
<dt><tt>--enable-verbose-latex</tt></dt>
<dd>Uses LaTeX non-stop mode for generating the PDF file of tvmet's
API documentation.
</dd>
</dl>
<dl>
<dt><tt>--disable-cppunit</tt></dt>
<dd>Disables the regression/unit test. For these tests you need an installed
<a href="http://www.sourceforge.net/projects/cppunit">CppUnit</a>.
</dd>
</dl>
<dl>
<dt><tt>--with-cxx=compiler</tt></dt>
<dd>Set the C++ compiler to compiler and options. The known compiler are
the GNU g++ (default), Intel icc, Kai C++ KCC, Portland Group C++ pgCC.
Please have a look at the \ref compiler page.
</dd>
</dl>
\section install_unix Build and Installation of tvmet on unix
The build target for make are:
<dl>
<dt><tt>all</tt></dt>
<dd>Makes tvmet ready for installation.</dd>
</dl>
<dl>
<dt><tt>docs</tt></dt>
<dd>Makes the documentation using doxygen. Depends on the options given
to the configure script, the documentation are HTML and PDF/LaTeX.</dd>
</dl>
<dl>
<dt><tt>check</tt></dt>
<dd>Build and run the regression tests (needs CppUnit).</dd>
</dl>
<dl>
<dt><tt>install</tt></dt>
<dd>Installs tvmet.</dd>
</dl>
<dl>
<dt><tt>uninstall</tt></dt>
<dd>Do you really want this? :-)</dd>
</dl>
Further more inside the <tt>examples</tt> directory there is the target:
<dl>
<dt><tt>examples</tt></dt>
<dd>Build tvmet's examples.
At this date the example directory contains simple examples
for matrix, vector and matrix-vector operations. Further more
some sources which shows the use for expression tree printing
(expands the expression tree used).
</dd>
</dl>
Files will be installed in the following directories:
<ul>
<li><tt>Executables&nbsp;&nbsp;&nbsp;&nbsp;-&gt; ${prefix}/bin</tt></li>
<li><tt>Docs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt; ${prefix}/share/doc/tvmet-${version}</tt></li>
<li><tt>Man pages&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt; ${prefix}/man</tt></li>
<li><tt>Header file&nbsp;&nbsp;&nbsp;&nbsp;-&gt; ${prefix}/include/tvmet</tt></li>
</ul>
Default value for prefix is <tt>/usr/local</tt> but you may change it
with <tt>--prefix</tt> option to the <tt>configure</tt> script (see above).
\section install_win Build and Installation of tvmet on MS Windows
First, the windows version used doesn't matter - the compiler is your
tool. The compiler has to understand the high level C++ style of
tvmet.
Second, tvmet comes with pre-configured files for the windows compiler.
Therefore you don't need to follow the configure and build procedure. An
exception is the <a href="http://www.cygwin.com">cygwin</a> and
<a href="http://www.mingw.org/">MinGW</a> environment
since they emulate the unix environment on windows - they follow the
unix style process therefore.
Well, simply copy the tvmet source tree complete or only the include
directory to a location of your choice and include the path to your
compiler environment. Thats all.
To build the regression tests it's on your own to build support for
<a href="http://cppunit.sourceforge.net">cppunit</a> and create the
appropriate sub-project. tvmet does not deliver Microsoft Visual Studio
project files.
If of interest the config file for Visual Studio can be found on
<tt>tvmet/config/config-vc71.h</tt>. There are all compiler quirks and
defines needed.
\sa \ref vc71
*/
// Local Variables:
// mode:c++
// End:
// LocalWords: CppUnit GraphViz doxygen

View File

@ -0,0 +1,375 @@
/*
* $Id: compiler.dox,v 1.24 2005/03/09 12:05:19 opetzold Exp $
*/
/**
\page compiler Compiler Support
<p>Contents:</p>
- \ref requirements
- \ref gcc
- \ref kcc
- \ref pgCC
- \ref intel
- \ref vc71
\section requirements General compiler Requirements
This library is designed for portability - no compiler specific extensions
are used. Nevertheless, there are a few requirements: (These are all a part
of the C++ standard.)
- Support for the <tt>mutable</tt> keyword is required. This is used by the
CommaInitializer only.
- The <tt>typename</tt> keyword is used exhaustively here.
- The namespace concept is required. The tvmet library is itself is a
namespace. To avoid collisions of operators, there is also an element_wise
namespace within tvmet.
- Partial specialization is needed for the extrema functions min and max
to distinguish between vectors and matrices. This allows tvmet to return
an object with a specific behavior. (The location of an extremum in a
matrix has a (row, column) position whereas a vector extremum has only a
single index for its position).
\section gcc The GNU Compiler Collection
The <a href=http://gcc.gnu.org>GNU compiler</a> collection is mainly used for
developing this library. Moreover, it does compile the library the fastest.
\subsection gcc2953 GNU C++ Compiler v2.95.3
Gcc v2.95.3 is the last official release of the version 2 series from gnu.org.
Since this compiler features the \ref requirements it does work, but only
partial.
There are certain difficulties - see \ref ambiguous_overload (also, please
read about \ref gcc296). Furthermore, there are problems with functions and
operators declared in the namespace <code>element_wise</code> - the
compiler doesn't seem to find them--even though the compiler does know
about namespace tvmet. It appears to be a problem with nested namespaces and
the compiler's ability to perform function/operator lookup, especially during
regression tests: <code> matrix /= matrix </code> compiles inside a single
file but not at the regression tests--which is a contradiction in terms.
Porting to gcc v2.95.3 requires a lot of knowledge and effort--unfortunately,
I don't have enough of either. The examples do compile and the regression
tests build partially.
Matrix and vector operators are working, but don't expect too much.
\subsection gcc296 GNU C++ Compiler v2.96 (Rh7.x, MD8.x)
This compiler isn't an official release of the GNU Compiler group but shipped
by <a href=http://www.redhat.com>Red Hat</a> and Co.
Blitz++ is using a hasFastAccess() flag to perform a check for the use of
_bz_meta_vecAssign::fastAssign (without bounds checking) or
_bz_meta_vecAssign::assign (with bounds checking). This
isn't really necessary for operations on blitz::TinyVector, since it's
always true. Nevertheless, it is important for the produced asm code using
the gcc-c++-2.96-0.48mdk. Generally the code for Blitz++ using the gcc-2.96
is better than tvmet because of this (tested!).
I got into trouble with stl_relops.h where miscellaneous operators are defined. A
simple define of __SGI_STL_INTERNAL_RELOPS in the config header doesn't solve
the problem, only the commented out header version, see \ref
ambiguous_overload. Because of this problem, the regression tests don't
compile with this version. Projects with do not use the relational
operators are not affected.
It seems that the inlining performed by this compiler collection isn't very
smart. I got a lot of warnings: can't inline call to ... So, it would be
best to use the \ref gcc30x and later compilers.
\subsection gcc30x GNU C++ Compiler v3.0.x
These compiler produce better code than the \ref gcc296! Even the problems
with blitz++ fastAssign have vanished. And this compiler conforms to the
standard. The regression tests does compile and run successfully.
Due to the nature of ET and MT there is a need for a high level of inlining.
The v3.0.x seems to do this well as compared to the v2.9x compilers which
produce inline warnings.
This compiler works great with the
<a href=http://www.stlport.org">STLPort-4.5.3</a>
implementation of the STL/C++ Library, Tiny Vector and Matrix template library
and <a href=http://cppunit.sourceforge.net>cpp-unit</a>.
\subsection gcc31x GNU C++ Compiler v3.1
%tvmet does compile with this new GNU C++ compiler. The produced code looks
as good as the code created by \ref gcc30x. (Does anyone have time to make
a benchmark?)
The primary goal is conformance to the standard ISO/IEC 14882:1998.
\subsection gcc32x GNU C++ Compiler v3.2.x
The once again changed Application Binary Interface (ABI) doesn't affect
tvmet since it isn't a binary library--it's only compiled templates inside
the client code.
There are some problems with the GNU C++ compiler collection on the
regression test due to some bugs (IMO), \sa \ref regressiontest_failed.
\subsection gcc33x GNU C++ Compiler v3.3
Tested and works fine. Only some warnings on failed inlining which doesn't
concern tvmet directly.
Anyway, here the code from <tt>examples/ray.cc</tt> on gcc 3.3.3 using
<tt>-O2 -DTVMET_OPTIMIZE</tt>
\par Assembler (IA-32 Intel® Architecture):
\code
movl 16(%ebp), %edx
movl 12(%ebp), %ebx
movl 8(%ebp), %esi
fldl 8(%edx)
fldl 16(%edx)
fmull 16(%ebx)
fxch %st(1)
movl %ebx, -24(%ebp)
fmull 8(%ebx)
movl %edx, -32(%ebp)
fldl (%edx)
fmull (%ebx)
fxch %st(1)
movl %edx, -60(%ebp)
movl %edx, -12(%ebp)
faddp %st, %st(2)
faddp %st, %st(1)
fadd %st(0), %st
fstpl -56(%ebp)
movl -56(%ebp), %ecx
movl -52(%ebp), %eax
movl %ecx, -20(%ebp)
movl %eax, -16(%ebp)
movl %ecx, -40(%ebp)
movl %eax, -36(%ebp)
movl %ecx, -68(%ebp)
movl %eax, -64(%ebp)
fldl (%edx)
fmull -20(%ebp)
fsubrl (%ebx)
fstpl (%esi)
fldl 8(%edx)
fmull -20(%ebp)
fsubrl 8(%ebx)
fstpl 8(%esi)
fldl 16(%edx)
fmull -20(%ebp)
fsubrl 16(%ebx)
fstpl 16(%esi)
addl $64, %esp
popl %ebx
popl %esi
popl %ebp
ret
\endcode
\subsection gcc34x GNU C++ Compiler v3.4.x
The compiler 3.4.3 works fine, starting with tvmet release 1.7.1. The problem is
the correct syntax for the CommaInitializer template declaration and
implementation.
There is no assembler output for our <tt>examples/ray.cc</tt>, since I don't
have this compiler yet (yes, I need to update my linux system ;-)
\section kcc Kai C++
This has not been tested. Unfortunately Kai's compiler is no longer shipped
-- one should use the Intel compiler instead
(see <a href=http://www.kai.com>here</a>).
If you have used it successfully including regression and/or benchmark tests,
please give me an answer.
\section pgCC Portland Group Compiler Technology
\subsection pgCC32 Portland Group C++ 3.2
The <a href=http://www.pgroup.com>Portland Group</a> C++ compiler is shipped
with the RogueWave Standard C++ Library which provides conformance to the
standard. Unfortunately, the &lt;cname&gt; C library wrapper headers and the C++
overloads of the math functions are not provided on all platforms, see
<http://www.cug.com/roundup>. The download evaluation version 3.2-4 for
Linux is affected for example. At first glance, it does compile with pgCC
since it has has the great <a href=http://www.edg.com>EDG</a> front-end.
Maybe there is a solution with other standard library implementations like
<a href=http://www.stlport.org>STLPort</a> (On a quick try the STL Port
doesn't recognize the pgCC). If you know more about this, please let me know.
Anyway, the code produced is very poor even if I use high inlining levels
like the command line option -Minline=levels:100 which increases the compile
time dramatically! The benchmark tests have not been done. Unfortunately,
my trial period has expired. I haven't any idea if this compiler will pass
the regression tests.
\subsection pgCC51 Portland Group C++ 5.1
The <a href=http://www.pgroup.com>Portland Group</a> C++ compiler is shipped
with the <a href=http://www.stlport.org>STLport</a> Standard C++ Library, cool!
The code produced isn't very compact compared with the intel or gnu compiler.
Anyway it works, but the compiler time increases dramatically
even on higher inline levels.
\section intel Intel Compiler
\subsection icc5 Intel Compiler v5.0.1
This compiler complains even more than gcc-3.0.x regarding template
specifiers (e.g. correct spaces for template arguments to std::complex are
needed even when not instanced).
The produced code looks good but, I haven't done a benchmark to compare it
with the gcc-3.0.x since the compile time increases for the benchmark test
dramatically.
I have not run any regression tests due to the compile time needed by my
AMD K6/400 Linux box ...
\subsection icc6 Intel Compiler v6.0.x
Should work, but I haven't tested it.
\subsection icc7 Intel Compiler v7.x
This compiler is well supported by tvmet and passes the regression tests
without any failure - as opposed to the GNU C++ compiler collection.
\subsection icc8 Intel Compiler v8.x
No regression tests are done - reports are welcome. I'm not expecting
problems. Anyway, this versions uses pure macros for IEEE math isnan and
isinf. This prevents overwriting with tvmet's functions. Therefore
this functions are disabled after tvmet release 1.4.1. The code produced
is even on <tt>examples/ray.cc</tt> more compact than the \ref gcc33x.
Anyway, here the code from <tt>examples/ray.cc</tt> using
<tt>-O2 -DTVMET_OPTIMIZE</tt>
\par Assembler (IA-32 Intel® Architecture):
\code
movl 4(%esp), %ecx
movl 8(%esp), %edx
movl 12(%esp), %eax
fldl (%edx)
fmull (%eax)
fldl 8(%edx)
fmull 8(%eax)
fldl 16(%edx)
fmull 16(%eax)
faddp %st, %st(1)
faddp %st, %st(1)
fldl (%eax)
fxch %st(1)
fadd %st(0), %st
fmul %st, %st(1)
fxch %st(1)
fsubrl (%edx)
fstpl (%ecx)
fldl 8(%eax)
fmul %st(1), %st
fsubrl 8(%edx)
fstpl 8(%ecx)
fldl 16(%eax)
fmulp %st, %st(1)
fsubrl 16(%edx)
fstpl 16(%ecx)
ret
\endcode
\section vc71 Microsoft Visual C++ v7.1
\htmlonly
<script language="JavaScript">
var m_name="blbounnejapny";
var m_domain="hotmail.com";
var m_text='<a href="mailto:'+m_name+'@'+m_domain+'?subject=tvmet and Microsoft VC++">';
m_text+='Robi Carnecky</a>';
document.write(m_text);
</script>
\endhtmlonly
\latexonly
Robi Carnecky <blbounnejapny@hotmail.com>
\endlatexonly
has reported the success on tvmet using Visual C++ v7.1. At this
release of tvmet there are some warnings left - the work is on
progress.
The <a href="http://msdn.microsoft.com/visualc/vctoolkit2003/">Microsoft Visual C++ Toolkit 2003</a>
and Visual C++ prior 7.1 do not compile - you will get an undefined
internal error unfortunally.
Anyway, here the code from <tt>examples/ray.cc</tt>:
\par Assembler (IA-32 Intel® Architecture, no SSE2):
\code
push ebp
mov ebp, esp
and esp, -8 ; fffffff8H
sub esp, 28 ; 0000001cH
mov eax, DWORD PTR _ray$[ebp]
mov ecx, DWORD PTR _surfaceNormal$[ebp]
fld QWORD PTR [eax+16]
fmul QWORD PTR [ecx+16]
push ebx
fld QWORD PTR [eax+8]
push esi
fmul QWORD PTR [ecx+8]
push edi
mov edi, DWORD PTR $T35206[esp+52]
faddp ST(1), ST(0)
mov DWORD PTR $T35027[esp+60], edi
fld QWORD PTR [eax]
pop edi
fmul QWORD PTR [ecx]
faddp ST(1), ST(0)
fadd ST(0), ST(0)
fstp QWORD PTR $T35206[esp+36]
mov esi, DWORD PTR $T35206[esp+40]
mov edx, DWORD PTR $T35206[esp+36]
mov ebx, DWORD PTR $T35265[esp+40]
mov DWORD PTR $T35027[esp+44], edx
mov edx, DWORD PTR _reflection$[ebp]
mov DWORD PTR $T35027[esp+48], esi
fld QWORD PTR $T35027[esp+44]
fmul QWORD PTR [ecx]
pop esi
mov DWORD PTR $T35027[esp+36], ebx
pop ebx
fsubr QWORD PTR [eax]
fstp QWORD PTR [edx]
fld QWORD PTR $T35027[esp+36]
fmul QWORD PTR [ecx+8]
fsubr QWORD PTR [eax+8]
fstp QWORD PTR [edx+8]
fld QWORD PTR $T35027[esp+36]
fmul QWORD PTR [ecx+16]
fsubr QWORD PTR [eax+16]
fstp QWORD PTR [edx+16]
mov esp, ebp
pop ebp
\endcode
\sa \ref regressiontest_failed
\sa \ref install_win
*/
// Local Variables:
// mode:c++
// End:

View File

@ -0,0 +1,448 @@
/*
* Tiny Vector Matrix Library
* Dense Vector Matrix Libary of Tiny size using Expression Templates
*
* Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: dox_functions.cc,v 1.8 2003/12/19 18:01:37 opetzold Exp $
*/
#include <iostream>
#include <tvmet/config.h>
#include "Util.h"
class FunctionBase
{
public:
FunctionBase() {
m_binary_functions.push_back( BinaryFunction("atan2", "arcus tangent of two variables") );
m_binary_functions.push_back( BinaryFunction("drem", "floating-point remainder") );
m_binary_functions.push_back( BinaryFunction("fmod", "floating-point remainder") );
m_binary_functions.push_back( BinaryFunction("hypot", "Euclidean distance") );
m_binary_functions.push_back( BinaryFunction("jn", "Bessel") );
m_binary_functions.push_back( BinaryFunction("yn", "Bessel") );
m_binary_functions.push_back( BinaryFunction("pow", "power") );
m_unary_functions.push_back( UnaryFunction("abs", "absolute value") );
m_unary_functions.push_back( UnaryFunction("cbrt", "cube root") );
m_unary_functions.push_back( UnaryFunction("floor", "round") );
m_unary_functions.push_back( UnaryFunction("rint", "round") );
m_unary_functions.push_back( UnaryFunction("sin", "sin") );
m_unary_functions.push_back( UnaryFunction("sinh", "sinh") );
m_unary_functions.push_back( UnaryFunction("cos", "cos") );
m_unary_functions.push_back( UnaryFunction("cosh", "cosh") );
m_unary_functions.push_back( UnaryFunction("asin", "asin") );
m_unary_functions.push_back( UnaryFunction("acos", "acos") );
m_unary_functions.push_back( UnaryFunction("atan", "atan") );
m_unary_functions.push_back( UnaryFunction("exp", "exponential") );
m_unary_functions.push_back( UnaryFunction("log", "logarithmic") );
m_unary_functions.push_back( UnaryFunction("log10", "logarithmic") );
m_unary_functions.push_back( UnaryFunction("sqrt", "sqrt") );
#ifdef TVMET_HAVE_IEEE_MATH
m_unary_functions.push_back( UnaryFunction("asinh", "IEEE Math asinh") );
m_unary_functions.push_back( UnaryFunction("acosh", "IEEE Math acosh") );
m_unary_functions.push_back( UnaryFunction("atanh", "IEEE Math atanh") );
m_unary_functions.push_back( UnaryFunction("expm1", "IEEE Math expm1") );
m_unary_functions.push_back( UnaryFunction("log1p", "IEEE Math log1p") );
m_unary_functions.push_back( UnaryFunction("erf", "IEEE Math erf") );
m_unary_functions.push_back( UnaryFunction("erfc", "IEEE Math erfc") );
m_unary_functions.push_back( UnaryFunction("isnan", "IEEE Math isnan. "
"Return nonzero value if X is a NaN.") );
m_unary_functions.push_back( UnaryFunction("isinf", "IEEE Math isinf. "
"Return nonzero value if X is positive or negative infinity.") );
m_unary_functions.push_back( UnaryFunction("isfinite", "fIEEE Math isfinite. "
"Return nonzero value if X is not +-Inf or NaN.") );
m_unary_functions.push_back( UnaryFunction("j0", "IEEE Math Bessel") );
m_unary_functions.push_back( UnaryFunction("j1", "IEEE Math Bessel") );
m_unary_functions.push_back( UnaryFunction("y0", "IEEE Math Bessel") );
m_unary_functions.push_back( UnaryFunction("y1", "IEEE Math Bessel") );
m_unary_functions.push_back( UnaryFunction("lgamma", "IEEE Math lgamma") );
#endif
}
virtual ~FunctionBase() { }
public:
template<class Stream>
Stream& header(Stream& os) const {
m_type.header(os);
return os;
}
template<class Stream>
Stream& footer(Stream& os) const {
m_type.footer(os);
return os;
}
template<class Stream>
Stream& binary(Stream& os) const {
return os;
}
template<class Stream>
Stream& unary(Stream& os) const {
return os;
}
public:
typedef std::vector< BinaryFunction >::const_iterator bfun_iterator;
typedef std::vector< UnaryFunction >::const_iterator ufun_iterator;
public:
virtual const std::vector< BinaryFunction >& bfun() const { return m_binary_functions; }
virtual const std::vector< UnaryFunction >& ufun() const { return m_unary_functions; }
protected:
std::vector< BinaryFunction > m_binary_functions;
std::vector< UnaryFunction > m_unary_functions;
Type m_type;
};
class XprFunctions : public FunctionBase
{
public:
XprFunctions() { }
public:
template<class Stream>
Stream& operator()(Stream& os) const {
header(os);
binary(os);
binary2(os);
unary(os);
footer(os);
return os;
}
public:
template<class Stream>
Stream& header(Stream& os) const {
FunctionBase::header(os);
os << "//\n"
<< "// XprFunctions.h\n"
<< "//\n\n";
return os;
}
// binary functions
template<class Stream>
Stream& binary(Stream& os) const {
FunctionBase::binary(os);
for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
os << "/**\n"
<< " * \\fn " << fun->name() << "(const XprVector<E1, Sz>& lhs, const XprVector<E2, Sz>& rhs)\n"
<< " * \\brief " << fun->description() << " function for two XprVector.\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\fn " << fun->name() << "(const XprMatrix<E1, Rows, Cols>& lhs, const XprMatrix<E2, Rows, Cols>& rhs)\n"
<< " * \\brief " << fun->description() << " function for two XprMatrix.\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
}
return os;
}
// binary functions with pod and std::complex<>
template<class Stream>
Stream& binary2(Stream& os) const {
for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) {
for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
os << "/**\n"
<< " * \\fn " << fun->name() << "(const XprVector<E, Sz>& lhs, " << tp->name() << " rhs)\n"
<< " * \\brief " << fun->description() << " function between XprVector and " << tp->description() << ".\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
// os << "/**\n"
// << " * \\fn " << fun->name() << "(" << tp->name() << " lhs, const XprVector<E, Sz>& rhs)\n"
// << " * \\brief " << fun->description() << " function between " << tp->description() << " and XprVector.\n"
// << " * \\ingroup " << fun->group() << "\n"
// << " */\n\n";
os << "/**\n"
<< " * \\fn " << fun->name() << "(const XprMatrix<E, Rows, Cols>& lhs, " << tp->name() << " rhs)\n"
<< " * \\brief " << fun->description() << " function between XprMatrix and " << tp->description() << ".\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
// os << "/**\n"
// << " * \\fn " << fun->name() << "(" << tp->name() << " lhs, const XprMatrix<E, Rows, Cols>& rhs)\n"
// << " * \\brief " << fun->description() << " function between " << tp->description() << " and XprMatrix.\n"
// << " * \\ingroup " << fun->group() << "\n"
// << " */\n\n";
}
}
return os;
}
// unary functions
template<class Stream>
Stream& unary(Stream& os) const {
FunctionBase::unary(os);
for(ufun_iterator fun = ufun().begin(); fun != ufun().end(); ++fun) {
os << "/**\n"
<< " * \\fn " << fun->name() << "(const XprVector<E, Sz>& rhs)\n"
<< " * \\brief " << fun->description() << " function for XprVector\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\fn " << fun->name() << "(const XprMatrix<E, Rows, Cols>& rhs)\n"
<< " * \\brief " << fun->description() << " function for XprMatrix.\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
}
return os;
}
};
class VectorFunctions : public FunctionBase
{
public:
VectorFunctions() { }
public:
template<class Stream>
Stream& operator()(Stream& os) const {
header(os);
binary(os);
binary2(os);
binary3(os);
unary(os);
footer(os);
return os;
}
public:
template<class Stream>
Stream& header(Stream& os) const {
FunctionBase::header(os);
os << "//\n"
<< "// VectorFunctions.h\n"
<< "//\n\n";
return os;
}
// binary functions
template<class Stream>
Stream& binary(Stream& os) const {
FunctionBase::binary(os);
for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
os << "/**\n"
<< " * \\fn " << fun->name() << "(const Vector<T1, Sz>& lhs, const Vector<T2, Sz>& rhs)\n"
<< " * \\brief " << fun->description() << " function for two Vector.\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
}
return os;
}
// binary functions with pod and std::complex<>
template<class Stream>
Stream& binary2(Stream& os) const {
for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) {
for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
os << "/**\n"
<< " * \\fn " << fun->name() << "(const Vector<T, Sz>& lhs, " << tp->name() << " rhs)\n"
<< " * \\brief " << fun->description() << " function on Vector and " << tp->description() << ".\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
// os << "/**\n"
// << " * \\fn " << fun->name() << "(" << tp->name() << " lhs, const Vector<T, Sz>& rhs)\n"
// << " * \\brief " << fun->description() << " function on " << tp->description() << " and Vector.\n"
// << " * \\ingroup " << fun->group() << "\n"
// << " */\n\n";
}
}
return os;
}
// binary functions with expressions
template<class Stream>
Stream& binary3(Stream& os) const {
for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
os << "/**\n"
<< " * \\fn " << fun->name() << "(const XprVector<E, Sz>& lhs, const Vector<T, Sz>& rhs)\n"
<< " * \\brief " << fun->description() << " function on XprVector and Vector.\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\fn " << fun->name() << "(const Vector<T, Sz>& lhs, const XprVector<E, Sz>& rhs)\n"
<< " * \\brief " << fun->description() << " function on Vector and XprVector.\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
}
return os;
}
// unary functions
template<class Stream>
Stream& unary(Stream& os) const {
FunctionBase::unary(os);
for(ufun_iterator fun = ufun().begin(); fun != ufun().end(); ++fun) {
os << "/**\n"
<< " * \\fn " << fun->name() << "(const Vector<T, Sz>& rhs)\n"
<< " * \\brief " << fun->description() << " function on Vector.\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
}
return os;
}
};
class MatrixFunctions : public FunctionBase
{
public:
MatrixFunctions() { }
public:
template<class Stream>
Stream& operator()(Stream& os) const {
header(os);
binary(os);
binary2(os);
binary3(os);
unary(os);
footer(os);
return os;
}
public:
template<class Stream>
Stream& header(Stream& os) const {
FunctionBase::header(os);
os << "//\n"
<< "// MatrixFunctions.h\n"
<< "//\n\n";
return os;
}
// binary functions
template<class Stream>
Stream& binary(Stream& os) const {
FunctionBase::binary(os);
for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
os << "/**\n"
<< " * \\fn " << fun->name() << "(const Matrix<T1, Rows, Cols>& lhs, const Matrix<T2, Cols, Cols>& rhs)\n"
<< " * \\brief " << fun->description() << " function for two Matrizes.\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
}
return os;
}
// binary functions with pod and std::complex<>
template<class Stream>
Stream& binary2(Stream& os) const {
for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) {
for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
os << "/**\n"
<< " * \\fn " << fun->name() << "(const Matrix<T, Rows, Cols>& lhs, " << tp->name() << " rhs)\n"
<< " * \\brief " << fun->description() << " function on Matrix and " << tp->description() << ".\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
// os << "/**\n"
// << " * \\fn " << fun->name() << "(" << tp->name() << " lhs, const Matrix<T, Rows, Cols>& rhs)\n"
// << " * \\brief " << fun->description() << " function on " << tp->description() << " and Matrix.\n"
// << " * \\ingroup " << fun->group() << "\n"
// << " */\n\n";
}
}
return os;
}
// binary functions with expressions
template<class Stream>
Stream& binary3(Stream& os) const {
for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
os << "/**\n"
<< " * \\fn " << fun->name() << "(const XprMatrix<E, Rows, Cols>& lhs, const Matrix<T, Rows, Cols>& rhs)\n"
<< " * \\brief " << fun->description() << " function on XprMatrix and Matrix.\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\fn " << fun->name() << "(const Matrix<T, Rows, Cols>& lhs, const XprMatrix<E, Rows, Cols>& rhs)\n"
<< " * \\brief " << fun->description() << " function on Matrix and XprMatrix.\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
}
return os;
}
// unary functions
template<class Stream>
Stream& unary(Stream& os) const {
FunctionBase::unary(os);
for(ufun_iterator fun = ufun().begin(); fun != ufun().end(); ++fun) {
os << "/**\n"
<< " * \\fn " << fun->name() << "(const Matrix<T, Rows, Cols>& rhs)\n"
<< " * \\brief " << fun->description() << " function on Matrix.\n"
<< " * \\ingroup " << fun->group() << "\n"
<< " */\n\n";
}
return os;
}
};
int main()
{
XprFunctions xpr_fun;
VectorFunctions vec_fun;
MatrixFunctions mtx_fun;
Function::doxy_groups(std::cout);
xpr_fun(std::cout);
vec_fun(std::cout);
mtx_fun(std::cout);
}

View File

@ -0,0 +1,425 @@
/*
* Tiny Vector Matrix Library
* Dense Vector Matrix Libary of Tiny size using Expression Templates
*
* Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: dox_operators.cc,v 1.6 2003/11/30 08:26:25 opetzold Exp $
*/
#include <iostream>
#include <vector>
#include <string>
#include <tvmet/config.h>
#include "Util.h"
class OperatorBase
{
public:
OperatorBase() {
m_binary_operators.push_back( BinaryOperator("+", "Addition") );
m_binary_operators.push_back( BinaryOperator("-", "Subtraction") );
m_binary_operators.push_back( BinaryOperator("*", "Multliply") );
m_binary_operators.push_back( BinaryOperator("/", "Division") );
m_binary_operators.push_back( BinaryOperator("%", "Modulo", true) );
m_binary_operators.push_back( BinaryOperator("^", "Exclusive OR", true) );
m_binary_operators.push_back( BinaryOperator("&", "AND", true) );
m_binary_operators.push_back( BinaryOperator("|", "OR", true) );
m_binary_operators.push_back( BinaryOperator("<<", "Left Shift", true) );
m_binary_operators.push_back( BinaryOperator(">>", "Right Shift", true) );
m_binary_operators.push_back( BinaryOperator(">", "Bigger") );
m_binary_operators.push_back( BinaryOperator("<", "Lesser") );
m_binary_operators.push_back( BinaryOperator(">=", "Bigger Equal") );
m_binary_operators.push_back( BinaryOperator("<=", "Less Equal") );
m_binary_operators.push_back( BinaryOperator("==", "Equal") );
m_binary_operators.push_back( BinaryOperator("!=", "Not Equal") );
m_binary_operators.push_back( BinaryOperator("&&", "Logical AND", true) );
m_binary_operators.push_back( BinaryOperator("||", "Logical OR", true) );
m_unary_operators.push_back( UnaryOperator("!", "Logical Not", true) );
m_unary_operators.push_back( UnaryOperator("~", "Bitwise Not", true) );
m_unary_operators.push_back( UnaryOperator("-", "Negate") );
}
virtual ~OperatorBase() { }
public:
template<class Stream>
Stream& header(Stream& os) const {
m_type.header(os);
return os;
}
template<class Stream>
Stream& footer(Stream& os) const {
m_type.footer(os);
return os;
}
template<class Stream>
Stream& binary(Stream& os) const {
return os;
}
template<class Stream>
Stream& unary(Stream& os) const {
return os;
}
public:
typedef std::vector< BinaryOperator >::const_iterator bop_iterator;
typedef std::vector< UnaryOperator >::const_iterator uop_iterator;
public:
virtual const std::vector< BinaryOperator >& bop() const { return m_binary_operators; }
virtual const std::vector< UnaryOperator >& uop() const { return m_unary_operators; }
protected:
std::vector< BinaryOperator > m_binary_operators;
std::vector< UnaryOperator > m_unary_operators;
Type m_type;
};
class XprOperators : public OperatorBase
{
public:
XprOperators() { }
public:
template<class Stream>
Stream& operator()(Stream& os) const {
header(os);
binary(os);
binary2(os);
unary(os);
footer(os);
return os;
}
public:
template<class Stream>
Stream& header(Stream& os) const {
OperatorBase::header(os);
os << "//\n"
<< "// XprOperators.h\n"
<< "//\n\n";
return os;
}
// global binary math, bitops and logical operators
template<class Stream>
Stream& binary(Stream& os) const {
OperatorBase::binary(os);
for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const XprVector<E1, Sz>& lhs, const XprVector<E2, Sz>& rhs)\n"
<< " * \\brief " << op->description() << " operator for two XprVector\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1, Cols2>& rhs)\n"
<< " * \\brief " << op->description() << " operator for two XprMatrix.\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
}
return os;
}
// global binary math, bitops and logical operators with pod and std::complex<>
template<class Stream>
Stream& binary2(Stream& os) const {
for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) {
for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
if(tp->is_int() && op->int_only()) {
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const XprVector<E, Sz>& lhs, " << tp->name() << " rhs)\n"
<< " * \\brief " << op->description() << " operator between XprVector and " << tp->description() << ".\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(" << tp->name() << " lhs, const XprVector<E, Sz>& rhs)\n"
<< " * \\brief " << op->description() << " operator between " << tp->description() << " and XprVector.\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const XprMatrix<E, Rows, Cols>& lhs, " << tp->name() << " rhs)\n"
<< " * \\brief " << op->description() << " operator between XprMatrix and " << tp->description() << ".\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(" << tp->name() << " lhs, const XprMatrix<E, Rows, Cols>& rhs)\n"
<< " * \\brief " << op->description() << " operator between " << tp->description() << " and XprMatrix.\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
}
}
}
return os;
}
// global unary operators
template<class Stream>
Stream& unary(Stream& os) const {
OperatorBase::unary(os);
for(uop_iterator op = uop().begin(); op != uop().end(); ++op) {
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const XprVector<E, Sz>& rhs)\n"
<< " * \\brief " << op->description() << " operator for XprVector\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const XprMatrix<E, Rows, Cols>& rhs)\n"
<< " * \\brief " << op->description() << " operator for XprMatrix.\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
}
return os;
}
};
class VectorOperators : public OperatorBase
{
public:
VectorOperators() { }
public:
template<class Stream>
Stream& operator()(Stream& os) const {
header(os);
binary(os);
binary2(os);
binary3(os);
unary(os);
footer(os);
}
public:
template<class Stream>
Stream& header(Stream& os) const {
OperatorBase::header(os);
os << "//\n"
<< "// VectorOperators.h\n"
<< "//\n\n";
return os;
}
// global binary math, bitops and logical operators
template<class Stream>
Stream& binary(Stream& os) const {
OperatorBase::binary(os);
for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const Vector<T1, Sz>& lhs, const Vector<T2, Sz>& rhs)\n"
<< " * \\brief " << op->description() << " operator for two Vector\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
}
return os;
}
// global binary math, bitops and logical operators with pod and std::complex<>
template<class Stream>
Stream& binary2(Stream& os) const {
for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) {
for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
if(tp->is_int() && op->int_only()) {
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const Vector<T, Sz>& lhs, " << tp->name() << " rhs)\n"
<< " * \\brief " << op->description() << " operator between Vector and " << tp->description() << ".\n"
<< " * \\ingroup _operators\n"
<< " * \\ingroup " << op->group() << "\n";
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(" << tp->name() << " lhs, const Vector<T, Sz>& rhs)\n"
<< " * \\brief " << op->description() << " operator between " << tp->description() << " and Vector.\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
}
}
}
return os;
}
// global binary operations with expressions
template<class Stream>
Stream& binary3(Stream& os) const {
for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const XprVector<E, Sz>& lhs, const Vector<T, Sz>& rhs)\n"
<< " * \\brief " << op->description() << " operator between XprVector and Vector\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const Vector<T, Sz>& lhs, const XprVector<E, Sz>& rhs)\n"
<< " * \\brief " << op->description() << " operator between Vector and XprVector\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
}
return os;
}
// global unary operators
template<class Stream>
Stream& unary(Stream& os) const {
OperatorBase::unary(os);
for(uop_iterator op = uop().begin(); op != uop().end(); ++op) {
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const Vector<T, Sz>& rhs)\n"
<< " * \\brief " << op->description() << " operator for Vector\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
}
return os;
}
};
class MatrixOperators : public OperatorBase
{
public:
MatrixOperators() { }
public:
template<class Stream>
Stream& operator()(Stream& os) const {
header(os);
binary(os);
binary2(os);
binary3(os);
unary(os);
footer(os);
}
public:
template<class Stream>
Stream& header(Stream& os) const {
OperatorBase::header(os);
os << "//\n"
<< "// MatrixOperators.h\n"
<< "//\n\n";
return os;
}
// global binary math, bitops and logical operators
template<class Stream>
Stream& binary(Stream& os) const {
OperatorBase::binary(os);
for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const Matrix<T1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs)\n"
<< " * \\brief " << op->description() << " operator for two Matrizes\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
}
return os;
}
// global binary math, bitops and logical operators with pod and std::complex<>
template<class Stream>
Stream& binary2(Stream& os) const {
for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) {
for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
if(tp->is_int() && op->int_only()) {
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const Matrix<T, Rows, Cols>& lhs, " << tp->name() << " rhs)\n"
<< " * \\brief " << op->description() << " operator between Vector and " << tp->description() << ".\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(" << tp->name() << " lhs, const Matrix<T, Rows, Cols>& rhs)\n"
<< " * \\brief " << op->description() << " operator between " << tp->description() << " and Vector.\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
}
}
}
return os;
}
// global binary operations with expressions
template<class Stream>
Stream& binary3(Stream& os) const {
for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const XprMatrix<E, Rows, Cols>& lhs, const Matrix<T, Rows, Cols>& rhs)\n"
<< " * \\brief " << op->description() << " operator between XprMatrix and Matrix\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const Matrix<T, Rows, Cols>& lhs, const XprMatrix<E, Rows, Cols>& rhs)\n"
<< " * \\brief " << op->description() << " operator between Matrix and XprMatrix\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
}
return os;
}
// global unary operators
template<class Stream>
Stream& unary(Stream& os) const {
OperatorBase::unary(os);
for(uop_iterator op = uop().begin(); op != uop().end(); ++op) {
os << "/**\n"
<< " * \\fn operator" << op->symbol() << "(const Matrix<T, Rows, Cols>& rhs)\n"
<< " * \\brief " << op->description() << " operator for Matrix\n"
<< " * \\ingroup " << op->group() << "\n"
<< " */\n\n";
}
return os;
}
};
int main()
{
XprOperators xpr_op;
VectorOperators vec_op;
MatrixOperators mtx_op;
Operator::doxy_groups(std::cout);
xpr_op(std::cout);
//vec_op(std::cout);
//mtx_op(std::cout);
}

295
tvmet-1.7.1/doc/faq.dox Normal file
View File

@ -0,0 +1,295 @@
/**
\page faq FAQ
<p>Contents:</p>
-# \ref license_tvmet
-# \ref commercial_tvmet
-# \ref debug
-# \ref optimize
-# \ref ambiguous_overload
-# \ref conversion_non_scalar
-# \ref could_not_convert
-# \ref assign_op
-# \ref comma_initializer
-# \ref no_match_operator
-# \ref dimension_error
-# \ref rtlx_kernel_crash
-# \ref regressiontest_failed
Certain items on this page are also covered by the \ref usage and \ref notes
pages!
\section license_tvmet How is tvmet licensed?
tvmet comes with completely free source code. tvmet is available under the
terms of the GNU Lesser General Public License (LGPL).
I have amended the LGPL to explicitly allow statically linking tvmet (or any
modified version of tvmet) to your software. The LGPL is not clear on this
and I definitely want to allow it.
\sa \ref license
\section commercial_tvmet Can I use it in commercial software products?
Yes, you can. The LGPL allows you to do this, and you do not need to release
the source code to your software. You do need to release the source code for
any modifications you make to tvmet itself. (We would hope you would send
any improvements like these back to us anyways.)
\section debug Debugging the code
Not all faults can be caught at compile time. Therefore, there is a need
for runtime debugging by defining <code>TVMET_DEBUG</code> (e.g. index
operators of <code>Vector::operator(i)</code> and
<code>Matrix::operator(i,j)</code>). On defined TVMET_DEBUG a bounds checking
is involved. Runtime errors are handled throwing an assertion failure using
std::assert(). <code>TVMET_DEBUG</code> is <b>not</b> enabled by defining
<code>DEBUG</code>. This behavior differs from release less than 0.6.0
If you don't get the expected result on certain operations you can try the
\ref expr_print feature to check that the expression is being evaluated as
you expect.
\section optimize Optimizing the code
Starting after tvmet 1.5.0 there is a new define <code>TVMET_OPTIMIZE</code>.
If this is defined tvmet uses some compiler specific keywords.
Mainly, this declares the functions using gcc's
<tt>__attribute__((always_inline))</tt>. This allows the
compiler to produce high efficient code even on less
optimization levels, like gcc's -O2 or even -O!
This is known to work with gcc v3.3.3 (and higher).
Using icc's v8 gnuc compatibility mode this may work, I've read
that it's using as an hint, this means you can have static inline
functions inside left so you can't get the full power of this feature
for circumstances.
\section ambiguous_overload ambiguous overload for ... Compiler Error
When using gcc-2.96 you can get a compiler error like:
\code
ambiguous overload for ...
/usr/include/g++-3/stl_relops.h:42: candidates are: bool operator>
...
\endcode
I haven't any solution for this--even if I don't use it in the tvmet library.
A simple define __SGI_STL_INTERNAL_RELOPS in the config header doesn't solve
the problem. The easiest way (brute force method) is to comment out all
operators in stl_reops.h. (The better way is to use the gcc-3.0.x and later,
see \ref compiler.)
\section conversion_non_scalar conversion from ... to non-scalar type ... Compiler Error
You get a compiler error like:
\code
conversion from `tvmet::XprVector< ... >, Sz>' to non-scalar type
`tvmet::Vector<T, Sz>' requested
\endcode
Please read about \ref construct. You probably ignored or forgot the rules
of using expression templates.
\section could_not_convert could not convert `tvmet::operatorXX(...)' to `bool' ... Compiler Error
You get a compiler error like:
\code
could not convert `tvmet::operator==( ... , ... )' to `bool'
\endcode
In the example above, you did try (or hoped) to use a global operator==
which doesn't return a bool. Please read \ref compare.
\section assign_op no match for ?= operator
You get a compiler error like:
\code
no match for `tvmet::Vector<...>& /= tvmet::Vector<...>&' operator
\endcode
For element-wise operations, you need to use the element_wise namespace
(found within tvmet). As the name suggests, all these operators are
performed in an element wise fashion. (e.g. division of two vectors--not
allowed from a mathematical perspective--element by element.) The following
code snippet shows how to use it:
\code
using namespace tvmet;
Vector<double,3> v1, v2;
v1 = 1,2,3;
v2 = v1;
cout << v1 << endl;
{
using namespace tvmet::element_wise;
v1 /= v2;
}
cout << v1 << endl;
\endcode
\sa \ref operators
\sa \ref alias
\section comma_initializer storage size of `ERROR_CommaInitializerList_is_too_long' isn't known
You get a compiler error like:
\code
In member function `tvmet::CommaInitializer<Obj, LEN>::Initializer<T, (N + 1)> ....
storage size of `ERROR_CommaInitializerList_is_too_long' isn't known
\endcode
You have caused a forced compile time error. tvmet prevents you from
overwriting foreign memory! In other words, your comma separated initializer
list is too long, e.g. you wrote something like:
\code
using namespace tvmet;
Vector<double,3> v0;
v0 = 1,2,3,4,5,6,7,8,9;
\endcode
You just tried to fill a %Vector of length 3 with 9 values, which would
normally result in values being written off the end of the vector. tvmet
prevents this with the compile time error you just saw.
\section no_match_operator no match for `...' operator
You get a compiler error like:
\code
no match for `tvmet::Matrix<T, Sz, Sz>& * tvmet::XprVector<tvmet::MatrixColVectorReference<T, Sz, Sz>, Sz>' operator
include/tvmet/xpr/VectorOperators.h:123: candidates are:
// a lot of candidates....
\endcode
Perhaps you wrote code like:
\code
Matrix<float,3,3> eigenvecs;
Matrix<float,3,3> M;
...
Vector<float,3> ev0( M * col(eigenvecs, 0) );
\endcode
Using %tvmet prior to release 1.2.0 in this case: Obviously an operator
is missing... but which one? Well, all arithmetic operators have a
functional equivalent, in this case, prod(). Rewriting the code above
using the function syntax will give you a more descriptive error message:
\code
no matching function for call to
`prod(tvmet::Matrix<float, 3, 3>&, tvmet::XprVector<tvmet::MatrixColVectorReference<float, 3, 3>, 3>)'
\endcode
This says, I forgot to write a function with the appropriate operator.
In this case, please give me a hint by writing a short example, used compiler
and tvmet release.
\sa \ref dimension_error.
\section dimension_error no match for `tvmet::Matrix<double, R, C>& * tvmet::Vector<double, Sz>&' operator
You get a compiler error like:
\code
no match for `tvmet::Matrix<double, 4, 4>& * tvmet::Vector<double, 3>&' operator
candidates are: T tvmet::operator*(const T&, ...) ...
\endcode
This is a feature of tvmet. The compiler detects a mathematical problem:
You tried call an operator between tvmet objects which had incompatible
dimensions. For example, you attempted to multiply a matrix of dimension
4x4 with a vector of size 3 - this isn't mathematically feasible.
\section rtlx_kernel_crash Using with Linux Real-time Extensions crashes in kernel mode
Normally there should not be a problem on using tvmet inside Linux kernel
space as a C++ kernel module. Unfortunately, code working in normal
environment (e.g. Linux user space) crashes the Linux box by using linux
real-time extensions, definitely on <a href=http://www.rtai.org>RTAI</a>.
I haven't found the reason yet, my knowledge of assembler and debugging is
too limited.
\section regressiontest_failed Failed regression tests
Well, this is a strange world. It can happen that some (especially the
tan) regression test can fail. This is not a problem with the %tvmet library.
After some hours I reduce the problem to:
\code
cout << (std::tan(1.0) - std::tan(1.0)) << endl;
\endcode
got <tt>6.17995e-17</tt> on my Linux Mandrake 8.2/9.1 box. It makes no
difference if I take the tan function from namespace std or from the global
namespace. This is especially a problem for g++ v3.2 and prior. The Intel
compiler v7.0 isn't affected.
Especially on VC++ 7.1 you will get 2 failed tests for complex
%Matrix and %Vector. The error is about <tt>8.88178e-016</tt> and
<tt>1.77636e-015</tt>.
*/
// Local Variables:
// mode:c++
// End:
// LocalWords: RTAI

View File

@ -0,0 +1,17 @@
<hr>
<table width="100%">
<tr>
<td width="20%" align="right" valign="center">
Author:<br>
<script language="JavaScript">
var m_name="opetzold";
var m_domain="users.sourceforge.net";
var m_text='<a href="mailto:'+m_name+'@'+m_domain+'?subject=tvmet @VERSION@">';
m_text+='Olaf Petzold</a>';
document.write(m_text);
</script>
</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,37 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>
Tiny Vector Matrix library using Expression Templates
</title>
<!-- This Tiny Vector and Matrix C++ template libary uses Meta Templates and
Expression Templates to evaluate results at compile time - to make it fast
for low order (tiny) systems. -->
<META name="description" content="This Tiny Vector and Matrix C++ template
libary uses Meta Templates and Expression Templates to evaluate results
at compile time - to make it fast for low order (tiny) systems.">
<META name="keywords" content="tiny, vector, matrix, fast, C++, STL, template, library,
expression templates, meta templates, fixed size, fixed dimension,
matrix-matrix, matrix-vector, vector-matrix, binary, unary, operations, operators,
product, transpose, linear algebra, cross product, dot product, type promotion,
exception, linux, kernel, embedded system, regression test, gcc, g++,
blitz, blitz++, TinyVector, TinyMatrix, MTL, TNT,
gnu compiler suite, portland group c++, kai c++, intel compiler, LGPL">
<link href="tvmet.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#ffffff">
<table width="100%">
<tr>
<td width="20%" align="left" valign="center">
<a href="http://sourceforge.net/projects/tvmet">
<img src="http://sourceforge.net/sflogo.php?group_id=39733&type=3" width="125" height="37" border="0" alt="SourceForge Logo"></a>
</td>
<td width="50%" align="center" valign="center">
<b><big>T</big>iny <big>V</big>ector <big>M</big>atrix library using <big>E</big>xpression <big>T</big>emplates</b>
</td>
<td width="20%" align="right" valign="center">
<a href="http://tvmet.sourceforge.net">Sourceforge Project Page</a>
</td>
</tr>
</table>
<hr>

140
tvmet-1.7.1/doc/intro.dox Normal file
View File

@ -0,0 +1,140 @@
/*
* $Id: intro.dox,v 1.12 2004/11/30 09:05:53 opetzold Exp $
*/
/**
\mainpage
\section intro_contents Contents
- \ref introduction
- \ref license
- \ref news
- \ref changelog
- \ref benchmark
- \ref build
- \ref usage
- \ref faq
- \ref notes
- \ref compiler
- \ref works
- \ref credits
- \ref projects
- \ref links
*/
/**
\page introduction Introduction
This Tiny %Vector and %Matrix template library uses
<a href=http://extreme.indiana.edu/~tveldhui/papers/Template-Metaprograms/meta-art.html>Meta Templates</a>
(MT) and <a href=http://extreme.indiana.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html>
Expression Templates</a> (ET) to evaluate results at compile time -- which
makes it fast for low order (tiny) systems. "Tiny" is a subjective term,
but typically means vectors and matrices of size ten (10) or less.
The technique used internally by tvmet is described by Todd Veldhuizen:
- <a href=http://osl.iu.edu/~tveldhui/papers/techniques/>
Techniques for Scientific C++</a>
- <a href=http://osl.iu.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html>
Expression Templates</a>
- <a href=http://osl.iu.edu/~tveldhui/papers/Template-Metaprograms/meta-art.html>
Template Metaprograms</a>
and is used by his <a href=http://oonumerics.org/blitz/>blitz++</a>, too.
Therefore, the speed achieved by tvmet is similar to the speed of blitz++.
Unfortunately, blitz++ isn't developed any more (year 2001, 2002)
because of other interests being pursued by Todd Veldhuizen (like his Ph.D.).
Furthermore, blitz++'s TinyVector is mainly developed for use by the blitz++
Array class -- and not for minimalistic/tiny fast math support for which
tvmet <b>is</b> designed. Because of this, the operators and functions are
incomplete or not supported well. blitz::TinyMatrix supports a few lesser
operators and functions (as with blitz::TinyVector). blitz++ doesn't conform
to STL (e.g. Container<>::value_type isn't defined), it defines a T_numtype
or, for blitz::TinyVector, it does have an iterator begin() - but the end()
is missing (blitz::TinyMatrix doesn't have anything).
These were reasons why I developed tvmet. Still, tvmet is designed to be more
than a mere rehashing of blitz++. The primary design goals are:
-# mathematical notation and correctness,
-# high efficiency for small/tiny vector and matrices,
-# functionality and wide range of supported operators and functions, and
-# compatibility and portability.
The dimensions for vectors and matrices are statically bound at compile
time using template arguments. The bounded dimensions feature a <b>compile
time dimension check</b> to force adherence to proper dimensional sizes
between operands (even in the night if you are sleepy). For example, you
can't assign a %Vector or %Matrix with dimension = 3 to a %Vector or %Matrix
of dimension = 4; nor can you create an expression using a binary operation
between arguments with incompatible dimensions. This is a major difference
between tvmet (which features this) and blitz++ (which does not prevent
from this). Nevertheless, tvmet isn't a matlab, maple or octave for C++.
tvmet is a general purpose library and is not (yet) a linear algebra library.
It does not have an interface to other numerical libraries as BLAS or LAPACK.
<a href="http://sourceforge.net/projects/tvmet">Tiny Vector Matrix template
library</a> offers these features:
-# Matrices and Vectors with fixed sizes (of course), the data is stored in
a static array.
-# compile time dimension check for Vectors and Matrices to preserve the
mathematical meaning.
-# vector, matrix, matrix-matrix and matrix-vector fast operations:
- complete set of standard arithmetic operations for Vectors and Matrices
(<a href=http://oonumerics.org/blitz/>blitz++</a> supports this only for
TinyVector).
- complete set of standard compare operations for Vectors and Matrices
as well as ternary functions like <tt>a ? b : c</tt> (see eval for use).
- binary and unary operations.
- meta template use for %Matrix-Matrix-Product \f$M\,M\f$,
%Matrix-Transpose \f$M^T\f$ and %Matrix-Vector-Product \f$M\,x\f$
functions and operators.
- meta template for special functions like
\f$M^T\, x\f$, \f$M^T\,M\f$, \f$M\,M^T\f$ and \f$(M\,M)^T\f$
functions, see \ref spec_meta_func.
- simple %Matrix rows and column access as a %Vector.
- chaining of matrix and vector expressions is possible and working.
- %Vector inner and outer product (dot and cross product).
-# special handling for the aliasing problem - see \ref alias.
-# STL iterator interface. This opens the door to all sorts of great STL
applications.
-# type promotion (for handling Matrices and Vectors of differing types).
-# works on self defined types such as the std::complex<> type.
-# makes no use of exceptions. Therefore you can use it for embedded systems
or in Linux kernel space.
-# nice expression level printing for debugging purposes (print the expanded
expression tree).
-# good documentation with examples.
-# regression tests for nearly all operations and functions.
-# support for several compilers (see \ref compiler).
-# written as a pure class and template library, no binary libraries and
versioning are needed - designed to avoid code blot due to the use of
templates.
-# ISO/IEC 14882:1998 compliant.
Although there are many advantages and features, tvmet has some limitations.
Due to the expression template and meta template programming, the compilation
time increases for higher dimensional constructs. This can cause resource
limitations, especially for memory (during compilation). On the other hand,
the runtime performance will also decrease on higher order. Therefore only
use tvmet only tiny (typically less than 10) sizes. (The maximum useful
size/dimension depends on the operation, of course.) The \ref benchmark
gives a good entry point about these problem.
<a href=http://www.oonumerics.org/oon/#libraries>Other</a>
general purpose libraries and linear algebra libraries will do a better job
for larger matrix/vector problems.
*/
/**
\bugs regression test TestUnFunc::Arc and TestUnFunc::Log fails due to
precision errors.
*/
// Local Variables:
// mode:c++
// End:

677
tvmet-1.7.1/doc/license.dox Normal file
View File

@ -0,0 +1,677 @@
/*
* $Id: license.dox,v 1.7 2004/06/08 12:11:15 opetzold Exp $
*/
/**
\page license License
<p>Contents:</p>
- \ref tvmet_license
- \ref addendum
- \ref rationale
\section license tvmet's License
Copyright (C) 2001-2003 Olaf Petzold.
tvmet basically follows the standard GNU Lesser General Public License (LGPL).
Because of repeated questions on this topic, it has become apparent that many
people still had a number of uncertainties about licensing issues. Also, a
number of stipulations in the GNU Lesser Public License statement have
evidently been an impediment to truely wide-spread adoption of the tvmet
Library.
Thus, the intent of the License Addendum has been to provide clarification
of a number of obscure issues in the GNU Lesser General Public License, and
to relax a few of its stipulations with an eye to solving a couple of
practical issues.
Below follows the GNU Lesser Public License, followed by the tvmet Library
License addendum.
Finally, detailed rationale behind the License Addendum is presented.
\section tvmet_license The License
<pre>
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Section 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Section 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
&lt;one line to give the library's name and a brief idea of what it does.&gt;
Copyright (C) &lt;year&gt; &lt;name of author&gt;
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
&lt;signature of Ty Coon&gt;, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!
</pre>
\section addendum Addendum to License
<pre>
ADDENDUM TO LICENSE
February 2003
Copyright (C) 2003 Olaf Petzold
Everyone is permitted to create and distribute verbatim copies
of this license addendum document, but changing it is not allowed.
tvmet License Agreement:
0. tvmet ("The Library") is licensed under GNU Lesser General Public License
as published by the Free Software Foundation, version 2.1 of the License, or
(at your option) any later version, with the following additional conditions.
The following conditions take precedence over any conditions or restrictions
stipulated by the Lesser General Public License insofar as a conflict exists.
1. The tvmet License Agreement ("License") covers only tvmet ("The Library").
Other libraries which the Library may use are covered by their own respective
licenses.
2. Modification of the configure scripts, makefiles, or installation tools of
the Library to support a specific platform does not constitute creating a
modified or derivative work based on the Library.
3. Statically linking of a copy of the Library against any work using the
Library, i.e. the inclusion of (parts of) the Library into a program or
binary, is functionally equivalent to a work using the Library by linking to
it dynamically, and therefore does not constitute creating a modified or
derivative work based on the Library.
4. Otherwise, if the work is a derivative of the Library, you may distribute
the object code for the work under the terms of the GNU Lesser General Public
License. Any executables containing that work also may be distributed under
the Lesser General Public License whether or not they are linked directly
with the Library itself.
5. Programs or binaries linked with the Library must be identified as such by
including, in the Documentation or by other means (for example in the About
Box or Online Help), the following statement:
"This software uses tvmet (http://tvmet.sourceforge.net)."
END OF ADDENDUM
</pre>
\section rationale Rationale
We now launch into a point by point discussion of the License Addendum:
<ul>
<li>
Point 0 says that whereever LGPL and tvmet License Addendum disagree, the tvmet
License Addendum holds. In points not covered in the tvmet License Addendum,
LGPL shall hold.
</li>
<li>
Point 1 says we can not make any statements about anyone else's code; if your
application must use other libraries (jpeg, png, tiff, glibc, and so on), then
you must observe the licenses of these other libraries.
</li>
<li>
Point 2 clarifies that when we're talking about derived works, we're not talking
about making some minor changes to Makefiles or configuration scripts. However,
it would still be nice to communicate them with the tvmet community so as to be
able to support new platforms.
</li>
<li>
Point 3 addresses the practical problem of linking tvmet statically into an
application program or combined work. LGPL insists that the recipient of a
distribution of a combined work i.e. a program linked with the Library, be
allowed to relink; linking a program dynamically is usually the easiest way to
comply with this stipulation. However, there are sometimes practical or
logistical problems which make it difficult to comply with this requirement. We
have taken the position that static linking is functionally equivalent to
linking dynamically, and we're not really denying the recipient of a statically
linked program any source code he or she wouldn't be able to obtain otherwise.
</li>
<li>
Point 4 says that if you make a work based on the Library, then you may
distribute this under the Lesser General Public License:- in other words, point
4 applies only to a work using the Library being linked (statically or
dynamically) to the Library. It is in the spirit of LGPL that the recipient of
the combined work not be denied anything he or she would be able to receive with
the regular LGPL. However, statically linking an application program with a work
based on the Library, i.e. a modified copy would do just that! Point 5 says that
the regular Lesser General Public License applies in that case.
</li>
<li>
Point 5 requires you to identify your program as using the tvmet library. With
static linking, there would be no way for a normal user to tell otherwise. We
request that you include the given statement, and preferably a version number
also. The motivation is two-fold:
-# A certain amount of publicity for tvmet :-)
-# Some way for recipients of your program to know that (a) your program is
linked to the tvmet Library, and (b) for them to verify that they have in fact
not been denied anything they would have been able to obtain under LGPL, by
visiting this page which details the license information (there are many GPL-
vigilantes out there, and this might appease them).
</li>
</ul>
This concludes our remarks on the License revision; please feel free to contact
me if you have additional questions. The rationale section will likely be
expanded when there are still questions left unanswered.
*/
// Local Variables:
// mode:c++
// End:

41
tvmet-1.7.1/doc/links.dox Normal file
View File

@ -0,0 +1,41 @@
/*
* $Id: links.dox,v 1.3 2003/12/05 19:08:59 opetzold Exp $
*/
/**
\page links Links of Interest or Related Links
\section generell General Information on Numeric C++
- <a href=http://osl.iu.edu/~tveldhui/papers/techniques/>Techniques for Scientific C++</a>
- <a href=http://osl.iu.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html>Expression Templates</a>
- <a href=http://osl.iu.edu/~tveldhui/papers/Template-Metaprograms/meta-art.html>Template Metaprograms</a>
- <a href=http://oonumerics.org/oon/>The Object-Oriented Numerics Page</a> - a very good entry point
- <a href=http://www.openscience.org/links.php?section=103>The OpenScience Project > Mathematics > Linear Algebra</a>
- <a href=http://sal.kachinatech.com/B/0/>SAL- Numerical Analysis - Miscellaneous Software</a>
\section numlibs Other ET and MT Vector and Matrix Libraries
- <a href=http://oonumerics.org/blitz/>blitz++</a>
- <a href=http://www.genesys-e.org/ublas/>uBlas</a>
- <a href=http://www.lsc.nd.edu/research/mtl>MTL</a>
- <a href=http://sourceforge.net/projects/etsmo/>ETSMO</a> - no files released since over one year
- <a href=http://met.sourceforge.net/>MET</a>
- <a href=http://sourceforge.net/projects/metaet/>meta::Expr{T_emplate}</a>
- <a href=http://www.acl.lanl.gov/pete/>PETE</a>
- <a href=http://www.acl.lanl.gov/pooma/>POOMA</a>
- <a href=http://math.nist.gov/tnt/>TNT</a> - Template Numerical Toolkit
This list isn't complete. For more freely available libraries please have
a look <a href=http://www.oonumerics.org/oon/#libraries>here</a>.
*/
// Local Variables:
// mode:c++
// End:
// Local Variables:
// mode:c++
// End:

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

8
tvmet-1.7.1/doc/misc.dox Normal file
View File

@ -0,0 +1,8 @@
/*
* $Id: misc.dox,v 1.1.1.1 2003/02/08 19:32:50 opetzold Exp $
*/
// Local Variables:
// mode:c++
// End:

325
tvmet-1.7.1/doc/notes.dox Normal file
View File

@ -0,0 +1,325 @@
/*
* $Id: notes.dox,v 1.20 2004/04/11 01:29:41 opetzold Exp $
*/
/**
\page notes Some Notes ...
<p>Contents:</p>
-# \ref optimizing
-# \ref temporaries
-# \ref operators
-# \ref threads
-# \ref expressions
-# \ref adl
-# \ref alias
-# \ref spec_meta_func
-# \ref mmv
\section optimizing ... on optimizing
This depends heavily on compiler and the flags used. The code produced with
-O could be better than with -O2 even on gcc-2.9x suite. To get the best
results, you should examine the assembler code generated by your compiler.
Maybe I will write a benchmark suite for different compiler options one day.
(Maybe you could contribute?)
\section temporaries ... on temporaries
The use of expression templates (ET) and meta templates (MT) allows the
generated code to avoid the creation of many temporaries -- especially with
standard mathematical and assignment operations. There are times that you
have to use actual temporaries e.g. when swapping variables of type
double -- with integer values you can use the XOR operator.
Some implementations are using a loop with temporaries even if there is a
solution with ET. Than the loops are faster than MT.
\sa \ref mmv
\section operators ... on operators and namespace element_wise
Some operations on matrices and vectors are not available at first glance.
These are defined in the namespace <code>element_wise</code> because they
are element wise (and not strictly mathematical) operations.
But there is more: some functions do element wise operations per se (e.g.
vector addition) and are NOT inside namespace element_wise. Furthermore,
all comparison operators perform element wise operations.
\sa \ref compare
\section threads ... about Threads
This library is not thread safe. It's designed for small math operations where
the overhead for locking policies is too great. If you require locking for
a multi-threaded application, you will need to write a wrapper.
\section expressions ... on expressions
The first versions of %tvmet had only one expression (Xpr) which was shared
for both vectors and matrices. This was working fine, but limited tvmet's
use for arithmetic expressions expressions on complex values. For this
reason, I had to separate expression types for vectors and matrices. The
same problem appeared when using the eval() function for evaluating these
expressions. (Which index operator should handle it?) Unfortunately, the
use of separate expression types vastly increases the number of operators
and functions needed to make the library viable. Fortunately, most boundary
checks are not necessary since they are done at compile time (such as those
needed by the assignment operator, etc).
\section adl ... on namespaces and Koenig Lookup
IMO, the cleanest way would be to put all functions into their own
namespace <code>Functional</code> instead of naming them with the
<code>fncl_</code> prefix they currently have. (I did beforehand, and
have thought better since). Unfortunately, this technique doesn't work well.
I got compiler errors like:
\code
template <class T> Functional::xyt<T>' is not a function
conflict with `template <class E> xyz(Xpr<E>)' in call to `xyz'
\endcode
when trying:
\code
typedef Vector<double, 3> vector3d;
vector3d t1(1,2,3);
vector3d t2(t1);
vector3d r;
r = sqrt( t1 * t2 );
\endcode
ADL (argument dependent lookup), aka Koenig Lookup, is causing the
compiler to check for a match in namespace Functional, since the
template instantiation is part of Functional (the Xpr stuff), it matches
before the global namespace (the Vector stuff) is checked. Writing:
\code
r = ::sqrt( t1 * t2 );
\endcode
seems to solve the problem at first glance. However, to force the user of
the library into this syntax is painful and could probably run cause other
problems with other namespaces (I haven't checked this). Therefore, all
"Functionals" have the prefix fncl_.
\section alias ... about aliasing
tvmet assumes that all matrices and vectors are alias free. These means that
source and destination memory layout of matrices and vectors never overlaps
(during an operation).
This is very easy to understood if you see a matrix-vector product. Both
contain different data in different (unique, non-overlapping) memory
regions -- hence, they are alias free. Contrast this with a matrix-matrix
multiply which maybe can have an aliasing, e.g. \f$A = A * B\f$.
When source and destination memory regions are the same, the computed results
may be wrong. (Probably they will be.) But, \f$C = A * B\f$ is alias free.
Let's see an example in detail:
\par Example:
\code
Matrix<double,3,3> M1;
M1 = 1,2,3,4,5,6,7,8,9;
cout << "M1 = " << M1 << endl;
M1 = trans(M1);
cout << "M1 = " << M1 << endl;
\endcode
\par Output:
\code
M1 = Matrix<d, 3, 3> = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
M1 = Matrix<d, 3, 3> = [
[1, 4, 7],
[4, 5, 8],
[7, 8, 9]
]
\endcode
As you can see, the lower triangular matrix isn't what you expected due to
the aliasing. These results depends on the compiler optimizations, too.
Unfortunately, to avoid the aliasing problem, you must use temporaries
as shown here:
\par Example:
\code
matrix_type temp_A(A);
A = temp_A * B;
cout << "matrix_type temp_A(A);\n"
<< "A = temp_A * B = " << A << endl;
\endcode
Anyway, it seems there is a small exception (no guarantee, since it's
compiler dependent I assume) for element wise operations with matrices
or vectors on right hand side.
Starting with tvmet release 1.4.1 there is a new function alias. These
function use a proxy to call special member functions of the %Matrix/Vector
class. These member functions introduce the temporary for you.
\par Example:
\code
typedef tvmet::Matrix<double, 3, 3> matrix_type;
matrix_type M;
std::generate(M.begin(), M.end(),
tvmet::util::Incrementor<matrix_type::value_type>());
std::cout << "M = " << M << std::endl;
alias(M) = trans(M);
std::cout << "M = " << M << std::endl;
\endcode
with the expected
\par Output:
\code
M = [
[1, 4, 7],
[2, 5, 8],
[3, 6, 9]
]
\endcode
These function/proxy will work for the element wise operators +=, -=, *= and /=
with expressions, e.g. as trans() returns.
\sa \ref assign_op
\section spec_meta_func ... special Meta-Template Functions
From a principle point of view, there is no need for some special functions
for %Matrix and %Vector functions, namely \f$M^T\, x\f$, \f$M^T\,M\f$,
\f$M\,M^T\f$, and \f$(M\,M)^T\f$.
Unfortunately, the g++ compiler throws in the towel sometimes even on
transposing matrices. Because of this, %tvmet offers specialized functions
which speed up at runtime (about factor 2 ... 3) using meta templates.
\par Example:
\code
using namespace tvmet;
Matrix<double, 6, 3> M1(0); // will be transposed to be conform to vector size
Vector<double, 6> v1(0);
Vector<double, 3> v2(0);
M1 = ...
v1 = ...
v2 = Mtx_prod(M1, v1); // equal to: v2 = trans(M1)*v1;
\endcode
BTW, the %Matrix-%Matrix \f$M\,M\f$ and %Matrix-%Vector \f$M\,x\f$
products use Meta-Templates, too.
\sa \ref Mtx_prod
\sa \ref MMt_prod
\sa \ref MtM_prod
\sa \ref trans_prod
\section mmv ... about Matrix-Matrix-Vector and Matrix-Matrix-Matrix-operations
The problem is related to the optimizer - due to the expression and meta
templates used.
Internally, an expression template may contain other expression templates
(meta templates inside as well as) too - the compiler will unroll all of
these expression into a single resultant expression (which is a hard job).
Sometimes the code generated from this is worse (from a performance point
of view) than just using simple temporaries.
You can chain matrix-matrix and matrix-vector operations without writing
temporaries by yourself (if this is what you want).
\par from examples/hspiess.cc:
\code
tvmet::Matrix<double,3,2> B;
tvmet::Matrix<double,3,3> D;
tvmet::Matrix<double,2,2> K;
B =
-0.05, 0,
0, 0.05,
0.05, -0.05;
D =
2000, 1000, 0,
1000, 2000, 0,
0, 0, 500;
K = trans(B) * D * B;
\endcode
The performance can be sub optimal due to the increasing complexity
of operations. This can be reduced by a user specified temporary:
\par from examples/hspiess.cc:
\code
// as before
K = tvmet::Matrix<double,2,3>(trans(B) * D) * B;
\endcode
or
\code
K = prod(tvmet::Matrix<double,2,3>(prod(trans(B), D)), B);
\endcode
At this moment an intelligent cache and pre-evaluating strategy is
missing by %tvmet.
\sa \ref spec_meta_func
\sa some notes \ref temporaries
*/
// Local Variables:
// mode:c++
// End:

View File

@ -0,0 +1,21 @@
/*
* $Id: projects.dox,v 1.6 2004/04/09 05:48:16 opetzold Exp $
*/
/**
\page projects Projects using tvmet
Please write me about projects using tvmet - I'm highly interested in !
-# Not really a project but, an interesting application is
<a href=http://www.radiumsoftware.com/files/pathtrace.cxx.1.12.txt>here</a>.
-# <a href=http://www.iplt.org>IPLT</a>, an image processing libary
and toolbox for the electron microscopy community.
*/
// Local Variables:
// mode:c++
// End:

225
tvmet-1.7.1/doc/tvmet.css Normal file
View File

@ -0,0 +1,225 @@
BODY {
background: white;
color: black;
margin-right: 20px;
margin-left: 20px;
}
H1 {
text-align: center;
font-family: Arial, Helvetica, sans-serif;
text-decoration: none;
font-weight: bold;
}
H2 {
color: white;
font-family: Geneva, Arial, Helvetica, sans-serif;
text-decoration: none;
font-weight: bold;
background-color: black;
}
H3 {
text-decoration: underline;
}
CAPTION {
font-weight: bold
}
DIV.qindex {
width: 100%;
background-color: #eeeeff;
border: 4px solid #eeeeff;
text-align: center;
margin-bottom: 2px
}
A.qindex {
text-decoration: none;
font-weight: bold;
color: #0000ee
}
A.qindex:visited {
text-decoration: none;
font-weight: bold;
color: #0000ee
}
A.qindex:hover {
text-decoration: none;
background-color: #ddddff
}
A.qindexHL {
text-decoration: none;
font-weight: bold;
background-color: #6666cc;
color: #ffffff
}
A.qindexHL:hover { text-decoration: none; background-color: #6666cc; color: #ffffff }
A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
A.el { text-decoration: none; font-weight: bold }
A.elRef { font-weight: bold }
A.code { text-decoration: none; font-weight: normal; color: #4444ee }
A.codeRef { font-weight: normal; color: #4444ee }
A:hover { text-decoration: none; background-color: #f2f2ff }
DL.el { margin-left: -1cm }
DIV.fragment {
width: 98%;
border: 1px solid #CCCCCC;
background-color: #f5f5f5;
padding-left: 4px;
margin: 4px;
}
DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
TD.md { background-color: #f2f2ff; font-weight: bold; }
TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; }
TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; }
DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }
DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }
TD.indexkey {
background-color: #eeeeff;
font-weight: bold;
padding-right : 10px;
padding-top : 2px;
padding-left : 10px;
padding-bottom : 2px;
margin-left : 0px;
margin-right : 0px;
margin-top : 2px;
margin-bottom : 2px
}
TD.indexvalue {
background-color: #eeeeff;
font-style: italic;
padding-right : 10px;
padding-top : 2px;
padding-left : 10px;
padding-bottom : 2px;
margin-left : 0px;
margin-right : 0px;
margin-top : 2px;
margin-bottom : 2px
}
TR.memlist { background-color: #f0f0f0;}
P.formulaDsp { text-align: center; }
IMG.formulaDsp { }
IMG.formulaInl { vertical-align: middle; }
SPAN.keyword { color: #008000 }
SPAN.keywordtype { color: #604020 }
SPAN.keywordflow { color: #e08000 }
SPAN.comment { color: #800000 }
SPAN.preprocessor { color: #806020 }
SPAN.stringliteral { color: #002080 }
SPAN.charliteral { color: #008080 }
.mdTable {
border: 1px solid #868686;
background-color: #f2f2ff;
}
.mdRow {
padding: 8px 20px;
}
.mdescLeft {
font-size: smaller;
font-family: Arial, Helvetica, sans-serif;
background-color: #FAFAFA;
padding-left: 8px;
border-top: 1px none #E0E0E0;
border-right: 1px none #E0E0E0;
border-bottom: 1px none #E0E0E0;
border-left: 1px none #E0E0E0;
margin: 0px;
}
.mdescRight {
font-size: smaller;
font-family: Arial, Helvetica, sans-serif;
font-style: italic;
background-color: #FAFAFA;
padding-left: 4px;
border-top: 1px none #E0E0E0;
border-right: 1px none #E0E0E0;
border-bottom: 1px none #E0E0E0;
border-left: 1px none #E0E0E0;
margin: 0px;
padding-bottom: 0px;
padding-right: 8px;
}
.memItemLeft {
padding: 1px 0px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-style: solid;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-family: Geneva, Arial, Helvetica, sans-serif;
font-size: 12px;
}
.memItemRight {
padding: 1px 0px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-style: solid;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-family: Geneva, Arial, Helvetica, sans-serif;
font-size: 13px;
}
.search {
color: #0000ee;
font-weight: bold;
}
FORM.search {
margin-bottom: 0px;
margin-top: 0px;
}
INPUT.search {
font-size: 75%;
color: #000080;
font-weight: normal;
background-color: #eeeeff;
}
TD.tiny {
font-size: 75%;
}

View File

@ -0,0 +1,111 @@
%% Version: $Id: tvmet.sty.in,v 1.2 2004/03/27 14:00:33 opetzold Exp $
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\def\@rcs@ $#1Date: #2 #3$$#4Revision: #5$ {
\ProvidesPackage{tvmet}[#2 v#5tvmet doxygen latex style]}
\@rcs@ $Date: 2004/03/27 14:00:33 $$Revision: 1.2 $
\DeclareOption{}{%%%
}
%%\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{}}
\ExecuteOptions{}
\ProcessOptions
% elementary for pdflatex
\newif\ifpdf
\ifx\pdfoutput\undefined
\pdffalse % no pdftex
\else
\pdfoutput=1 % running pdftex
\pdftrue
\fi
% Postscript fonts
\RequirePackage[scaled=0.92]{helvet}
\RequirePackage{courier}
\RequirePackage{typearea} % from KOMA script
% doxygen need this; it includes the style for formulas too
\RequirePackage{fancyhdr}
%%%%%%%%%%%%%%%%%%%%%%%%% tvmet style %%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% page borders
%%
\areaset[2cm]% % binding border
{16cm}{26cm} % text width and height
%%
%% sans serif is default font
%%
\renewcommand{\familydefault}{\sfdefault}
%%
%% overwrite doxygen's hyperref setup
%%
\ifpdf\hypersetup{
baseurl={http://tvmet.sourceforge.net},
pdftitle={@PACKAGE@ @VERSION@ Reference Manual},
pdfauthor={\textcopyright\,Olaf Petzold},
pdfsubject={%
This Tiny Vector and Matrix C++ template
libary uses Meta Templates and Expression Templates to evaluate results
at compile time - to make it fast for low order (tiny) systems.
},
pdfkeywords={%
tiny vector matrix fast C++ STL template library
expression templates meta templates fixed size fixed dimension
matrix-matrix matrix-vector vector-matrix binary unary operations operators
product transpose linear algebra cross product dot product type promotion
exception linux kernel embedded system regression test gcc g++
blitz blitz++ TinyVector TinyMatrix MTL TNT
gnu compiler suite portland group c++ kai c++ intel compiler LGPL
},
%
bookmarks={true},
bookmarksnumbered={true},
bookmarksopen={true},
pdfpagelabels={true},
pdfmenubar={true},
pdftoolbar={true},
plainpages={false},
pdfstartview={FitH},
pdfpagemode={UseOutlines},
pdfhighlight={/I}
}
\fi
%%
%% overwrite fancyheadings
%%
\makeatletter
\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
\hbox{}\vspace*{\fill}
\thispagestyle{empty}
\newpage
\if@twocolumn\hbox{}\newpage\fi\fi\fi}
\makeatother
\renewcommand{\sectionmark}[1]{%
\markright{\thesection.\ #1}}
\makeatletter
\lhead[\textbf{@PACKAGE@ @VERSION@}]{\fancyplain{}{\bfseries\rightmark}}
\rhead[\fancyplain{}{\bfseries\leftmark}]{\textbf{@PACKAGE@ @VERSION@}}
\makeatother
\chead{}
\lfoot{}
\cfoot{\bfseries --\ \thepage\ --}
\rfoot{}
\setlength{\headwidth}{0.0cm}
\setlength{\headwidth}{\textwidth}
\endinput
%%% Local Variables:
%%% mode: latex
%%% TeX-auto-save: nil
%%% TeX-auto-parse-length: 99999
%%% ispell-local-dictionary: "american"
%%% End:

407
tvmet-1.7.1/doc/usage.dox Normal file
View File

@ -0,0 +1,407 @@
/*
* $Id: usage.dox,v 1.14 2004/07/03 17:09:23 opetzold Exp $
*/
/**
\page usage Usage
<p>Contents:</p>
-# \ref include
-# \ref construct
-# \ref c_arrays
-# \ref compare
-# \ref pod
-# \ref stl
-# \ref matrix_access
-# \ref expr_print
\section include Include files
The Tiny %Vector and %Matrix template library has many include files spread
throughout the %tvmet include directory. As a user, you need only include
<tt><%tvmet/Vector></tt> for vector operations and/or
<tt><%tvmet/Matrix></tt> for matrix operations.
\par Example:
\code
#include <tvmet/Matrix.h>
#include <tvmet/Vector.h>
using namespace tvmet;
\endcode
Simple, isn't it? Don't forget to use the namespace tvmet, but keep in mind
that using the using directive inside headers will pollute the namespace. If
you write this in a header file, the namespace for all subsequent header
files (those which include the one you're writing) will also be polluted.
(This is not a %tvmet specific phenomenon.) Therefore, write the using
statement in the C++ file.
\section construct Construction and Initializing
Due to the nature of
<a href=http://extreme.indiana.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html>
Expression Templates</a> (ET) you can't write code like
\par Example:
\code
tvmet::Vector<double, 3> v1(1,2,3); // OK
tvmet::Vector<double, 3> v2 = v1; // not possible
\endcode
The operator= function assigns an expression to the Vector which means that
the object must be constructed before you may assign something to it. The
solution is to write this as:
\par Example:
\code
using namespace tvmet;
Vector<double, 3> v1(1,2,3);
Vector<double, 3> v2; // construct the Vector<T,Sz> object at first
v2 = v1; // ... and assign the contents of v1 to v2
Vector<double, 3> v3(v1); // ... or simple use the copy constructor
std::cout << v3 << std::endl;
\endcode
since the object v2 needs to be constructed before the object's operator=()
can be called.
The same rule applies to the Matrix class. You can only assign vectors and
matrices of the same dimension or you will get a compile error. This also
applies to the argument list for the constructor of the classes.
Initializing can be done as shown above or by using a comma separated list:
\par Example:
\code
using namespace tvmet;
Matrix<double, 3, 2> m1; // yes, non-square matrices are possible as well
m1 = 1, 4,
2, 5,
3, 6;
\endcode
Matrix element initialization always performed column wise! If the length
of the comma separated list is longer than the storage size, you will get
a compile time error. (tvmet is designed to prevent this -- it will prevent
you from accidentally overwriting memory which does not belong to the
matrix you are initializing.) You can use a comma separated list to
initialize vectors as well.
If you want a clean (zero-valued) vector or matrix you can simple write:
\par Example:
\code
using namespace tvmet;
Vector<double, 3> v4(0);
Matrix<double, 3, 4> m2(0);
\endcode
All elements of v4 and m2 are initialized with zero (or whatever value you
provide at construction time). Keep in mind that the uninitialized %Matrix
and %Vector classes will have random data when the are created (since they
use a static array for internal storage) unless you initialize them!
Another way to initialize a vector or matrix follows:
\par Example:
\code
using namespace tvmet;
Vector<double, 3> v5(1,2,3);
Vector<double, 3> v6(v5);
Vector<double, 3> v7(v5+v6);
\endcode
This is useful for temporary results. The result will be immediately
assigned to the new vector elements using the expression passed to the
constructor.
Yet another way of initializing a vector or matrix is similar to the above.
We assign an expression to it:
\par Example:
\code
using namespace tvmet;
Matrix<double, 3, 3> m3, m4, m5;
m3 = 1, 2, 3,
4, 5, 6,
7, 8, 9;
m4 = m3;
m5 = m3 + m4;
\endcode
If you have your data inside arrays you can use tvmet's iterator interface
to initialize a vector or matrix with it:
\par Example:
\code
T data[] = { 1,4,7,
2,5,8,
3,6,9 };
std::size_t sz = sizeof(data)/sizeof(T);
T* first = data;
T* last = data + sz;
tvmet::Matrix<double, 3, 3> m(first, last);
\endcode
The data will be copied into the matrix itself. When the constructor has
finished, there will be no stored reference to the array pointer.
Starting with tvmet release 1.6.0 you can create an identity matrix
simply by using the function identity(). Note, we have to specify the
matrix type, since ADL can't work here.
\par Example:
\code
typedef Matrix<double,3,3> matrix_type;
...
matrix_type E( identity<matrix_type>() );
\endcode
\section c_arrays Use of C style Arrays with tvmet
Sometimes you have some data arranged in a C style array for matrices
and vectors. As with tvmet release 1.6.0 you can wrap an expression
around using the functions vector_ref(const T* mem) and
matrix_ref(const T* mem) where mem is the pointer to the C array.
The returned expressions (XprVector or XprMatrix) can be used
as usual like tvmet's vectors and matrices. This means, you
can use all mathematical functions on it.
\par Example:
\code
static float lhs[3][3] = {
{-1, 0, 1}, { 1, 0, 1}, {-1, 0, -1}
};
static float rhs[3][3] = {
{ 0, 1, 1}, { 0, 1, -1}, { 0, -1, 1}
};
...
typedef Matrix<float, 3, 3> matrix_type;
matrix_type M( prod(matrix_ref<float, 3, 3>(&lhs[0][0]),
matrix_ref<float, 3, 3>(&rhs[0][0])) );
\endcode
This allows to initialize tvmet's vectors and matrices by
an alternative way as described at \ref construct.
\section compare Compare Vectors and Matrices
If you expect to find global comparison operators for comparing Vectors
and Matrices, you are right -- these are provided. But, the return
value probably isn't what you expect: a boolean value. Instead, the operator
returns an expression (e.g. XprVector<>). The contents of this expression
type is a element wise logical operation (depends on the given operator
like ==, <, >, etc...)! To get a boolean value you need to evaluate the
expression using all_elements() or any_elements(), as follows:
\par Example:
\code
using namespace tvmet;
using namespace std;
Vector<double, 3> v1, v2, bv;
v1 = 1,2,3;
v2 = 1,3,3;
bv = v1 == v2;
cout << bv << endl;
cout << "v1 == v2 is "
<< ( all_elements( v1 == v2 ) ? "true" : "false" )
<< endl;
\endcode
This gives
\par [continued]
\code
Vector<d, 3>[1, 0, 1]
v1 == v2 is false
\endcode
The reason for this is the element wise operation on all elements (for both
Vectors and Matrices). Comparing two vectors will result in a "boolean Vector"
expression. Using all_elements/any_elements evaluates the result into a
single boolean by repeatedly applying the comparison for each element.
An other example on comparing is shown below:
\par Example:
\code
if(all_elements(X == Y)) { cout << "matrices are identical" << endl; }
if(any_elements(X == Y)) { cout << "at least one element is equal" << endl; }
if(any_elements(X != Y)) { cout << "not all elements are equal" << endl; }
\endcode
%tvmet prior release 1.2.1 did have a boolean version eval for comparing.
The functional and semantic meaning were not clear at all. Therefore I
decided to remove it.
\sa \ref operators
\section pod Data Types like std::complex<>
As we can see above we can use POD (plain old data) types like <tt>double</tt> and
<tt>int</tt> as data type of a %Vector or %Matrix. However, we are not limited to
this - we can use e.g. <tt>std::complex<></tt> as well:
\par Example:
\code
using namespace tvmet;
Vector<std::complex<double>,3> v1, v2;
Matrix<std::complex<double>,3,3> m1;
\endcode
And operate on these...
\par [continued]
\code
v1 = 1,2,3;
m1 = 1,4,7,
2,5,8,
3,6,9;
v2 = m1 * v1;
\endcode
Be careful. <tt>std::complex<></tt> isn't tested well on regression tests.
\section stl STL support
Since version 0.2.0 %tvmet has supported an iterator interface conform to
the STL and since version 0.5.0 reverse STL iterators have been supported,
too.
With these, you can mix the %tvmet Vector and Matrix containers with the
STL algorithms.
For example, if you don't like %tvmet's ostream operator, you can create
your own implementation like this:
\par Example:
\code
tvmet::Vector<double, 6> v(1,2,3,4,5,6);
std::cout << v << std::endl;
std::cout << "The Vector is:" << std::endl;
std::copy(v.begin(), v.end(), std::ostream_iterator<double>(std::cout, "\n"));
\endcode
Or, you create a random matrix and print it as shown here:
\par Example:
\code
tvmet::Matrix<double,6,6> m;
std::generate(m.begin(), m.end(), rand);
std::cout << m << std::endl;
\endcode
\section matrix_access Matrix access by rows and columns
If you need a specific row or column of a given matrix you can get access to
it by using the functions row and col. They will return an XprVector<T>.
Unfortunately, you do not get any write access to the vector elements - only
reading is permitted due to the expression template concept used here. For
write access, you have to use matrix indexing with the parentheses operator.
\par Example:
\code
using namespace tvmet;
typedef Matrix<double 5, 3> matrix_type;
typedef Vector<double, 5> matrix_rowvector;
typedef Vector<double, 3> matrix_colvector;
matrix_type M;
M = ....
matrix_rowvector row2 = row(M, 2);
matrix_colvector col3 = col(M, 3);
...
\endcode
\section expr_print Expression printing
Expression printing is a nice feature for debugging expressions. (For more
about expression templates and expression tree please have a look
<a href=http://extreme.indiana.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html>here</a>).
You can write out a simple matrix-vector multiplication of a vector
<tt>v1</tt> and a matrix <tt>m1</tt> of the dimension of 3 as follows:
\par Example:
\code
std::cout << m1 * v1 << std::endl;
\endcode
which will be expanded to:
\par [continued]
\code
XprVector<
XprMVProduct<
d, 3, 3, 3, 1, d, 1
>
3
>
\endcode
The "d" is a g++ placeholder for double. (This may vary from compiler to
compiler since it is an implementation detail of runtime type information
[rtti] determined by the compiler's manufacturer). The purpose of this
feature is to check the right evaluation of expressions into the tree on
complicated mathematical expressions.
A rich source of examples are the regression tests. They show all of the
supported operations and functions (if there is a regression test for this
of course). Some examples are in the examples directory.
*/
// Local Variables:
// mode:c++
// End:

40
tvmet-1.7.1/doc/works.dox Normal file
View File

@ -0,0 +1,40 @@
/*
* $Id: works.dox,v 1.5 2005/03/09 12:33:00 opetzold Exp $
*/
/**
\page works Future works
A good library is never complete. Here are some points which I hope to cover
in the future:
-# more regression tests (bit operations are missing, not all functions and type
promotion are tested) and examples (temporary the regression test can act
as examples). The problems with the regression tests actually used is,
that they does not follow mathematical, strong logical guide lines to cover all
possible cases.
-# write more examples, the regression test should not act as examples.
-# better support for std::complex type.
-# add functions like
- matrix inverse using LUdecomposition and other matrix vector functions
- meta functions for sin, cos etc.
-# System V math support on linux seems to be incomplete
-# better compiler support
-# Interface to other numerical libraries as uBlas, BLAS, and LAPACK.
Maybe, there will be a tvmet2. Some of the features mentioned above will
require a redesign of tvmet. With this new design tvmet can better handle
special matrices, like banded, symmetric or triangular matrices etc.
Furthermore, sparse tiny vectors and matrices are easy to implement, as well
as an allocator concept for re-sizable containers.
The priority depends on the \ref projects as well as the support from the
community - please support %tvmet.
*/
// Local Variables:
// mode:c++
// End:

View File

@ -0,0 +1,59 @@
# $Id: Makefile.am,v 1.12 2004/04/28 21:59:40 opetzold Exp $
AM_CXXFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
EXTRA_PROGRAMS = \
xpr_print_v1 \
xpr_print_v2 \
xpr_print_v3 \
xpr_print_v4 \
xpr_print_m1 \
xpr_print_m2 \
xpr_print_m3 \
xpr_print_m4 \
xpr_print_mv1 \
xpr_print_mv2 \
mv \
mm \
cmv \
cmm \
matrix_col \
diag \
ray \
hspiess \
redwards \
frob_matrix_norm \
alias \
aliasing
DISTCLEANFILES = $(EXTRA_PROGRAMS)
xpr_print_v1_SOURCES = xpr_print_v1.cc
xpr_print_v2_SOURCES = xpr_print_v2.cc
xpr_print_v3_SOURCES = xpr_print_v3.cc
xpr_print_v4_SOURCES = xpr_print_v4.cc
xpr_print_m1_SOURCES = xpr_print_m1.cc
xpr_print_m2_SOURCES = xpr_print_m2.cc
xpr_print_m3_SOURCES = xpr_print_m3.cc
xpr_print_m4_SOURCES = xpr_print_m4.cc
xpr_print_mv1_SOURCES = xpr_print_mv1.cc
xpr_print_mv2_SOURCES = xpr_print_mv2.cc
mv_SOURCES = mv.cc
mm_SOURCES = mm.cc
cmv_SOURCES = cmv.cc
cmm_SOURCES = cmm.cc
matrix_col_SOURCES = matrix_col.cc
diag_SOURCES = diag.cc
ray_SOURCES = ray.cc
redwards_SOURCES = redwards.cc
hspiess_SOURCES = hspiess.cc
frob_matrix_norm_SOURCES = frob_matrix_norm.cc
alias_SOURCES = alias.cc
aliasing_SOURCES = aliasing.cc
examples: $(EXTRA_PROGRAMS)

View File

@ -0,0 +1,651 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# $Id: Makefile.am,v 1.12 2004/04/28 21:59:40 opetzold Exp $
SOURCES = $(alias_SOURCES) $(aliasing_SOURCES) $(cmm_SOURCES) $(cmv_SOURCES) $(diag_SOURCES) $(frob_matrix_norm_SOURCES) $(hspiess_SOURCES) $(matrix_col_SOURCES) $(mm_SOURCES) $(mv_SOURCES) $(ray_SOURCES) $(redwards_SOURCES) $(xpr_print_m1_SOURCES) $(xpr_print_m2_SOURCES) $(xpr_print_m3_SOURCES) $(xpr_print_m4_SOURCES) $(xpr_print_mv1_SOURCES) $(xpr_print_mv2_SOURCES) $(xpr_print_v1_SOURCES) $(xpr_print_v2_SOURCES) $(xpr_print_v3_SOURCES) $(xpr_print_v4_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_triplet = @host@
EXTRA_PROGRAMS = xpr_print_v1$(EXEEXT) xpr_print_v2$(EXEEXT) \
xpr_print_v3$(EXEEXT) xpr_print_v4$(EXEEXT) \
xpr_print_m1$(EXEEXT) xpr_print_m2$(EXEEXT) \
xpr_print_m3$(EXEEXT) xpr_print_m4$(EXEEXT) \
xpr_print_mv1$(EXEEXT) xpr_print_mv2$(EXEEXT) mv$(EXEEXT) \
mm$(EXEEXT) cmv$(EXEEXT) cmm$(EXEEXT) matrix_col$(EXEEXT) \
diag$(EXEEXT) ray$(EXEEXT) hspiess$(EXEEXT) redwards$(EXEEXT) \
frob_matrix_norm$(EXEEXT) alias$(EXEEXT) aliasing$(EXEEXT)
subdir = examples
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
$(top_srcdir)/config/ac_cxx_have_complex.m4 \
$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
$(top_srcdir)/config/ac_cxx_typename.m4 \
$(top_srcdir)/config/ac_set_compiler.m4 \
$(top_srcdir)/config/op_doxygen_doc.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
CONFIG_HEADER = $(top_builddir)/config/config.h
CONFIG_CLEAN_FILES =
am_alias_OBJECTS = alias.$(OBJEXT)
alias_OBJECTS = $(am_alias_OBJECTS)
alias_LDADD = $(LDADD)
am_aliasing_OBJECTS = aliasing.$(OBJEXT)
aliasing_OBJECTS = $(am_aliasing_OBJECTS)
aliasing_LDADD = $(LDADD)
am_cmm_OBJECTS = cmm.$(OBJEXT)
cmm_OBJECTS = $(am_cmm_OBJECTS)
cmm_LDADD = $(LDADD)
am_cmv_OBJECTS = cmv.$(OBJEXT)
cmv_OBJECTS = $(am_cmv_OBJECTS)
cmv_LDADD = $(LDADD)
am_diag_OBJECTS = diag.$(OBJEXT)
diag_OBJECTS = $(am_diag_OBJECTS)
diag_LDADD = $(LDADD)
am_frob_matrix_norm_OBJECTS = frob_matrix_norm.$(OBJEXT)
frob_matrix_norm_OBJECTS = $(am_frob_matrix_norm_OBJECTS)
frob_matrix_norm_LDADD = $(LDADD)
am_hspiess_OBJECTS = hspiess.$(OBJEXT)
hspiess_OBJECTS = $(am_hspiess_OBJECTS)
hspiess_LDADD = $(LDADD)
am_matrix_col_OBJECTS = matrix_col.$(OBJEXT)
matrix_col_OBJECTS = $(am_matrix_col_OBJECTS)
matrix_col_LDADD = $(LDADD)
am_mm_OBJECTS = mm.$(OBJEXT)
mm_OBJECTS = $(am_mm_OBJECTS)
mm_LDADD = $(LDADD)
am_mv_OBJECTS = mv.$(OBJEXT)
mv_OBJECTS = $(am_mv_OBJECTS)
mv_LDADD = $(LDADD)
am_ray_OBJECTS = ray.$(OBJEXT)
ray_OBJECTS = $(am_ray_OBJECTS)
ray_LDADD = $(LDADD)
am_redwards_OBJECTS = redwards.$(OBJEXT)
redwards_OBJECTS = $(am_redwards_OBJECTS)
redwards_LDADD = $(LDADD)
am_xpr_print_m1_OBJECTS = xpr_print_m1.$(OBJEXT)
xpr_print_m1_OBJECTS = $(am_xpr_print_m1_OBJECTS)
xpr_print_m1_LDADD = $(LDADD)
am_xpr_print_m2_OBJECTS = xpr_print_m2.$(OBJEXT)
xpr_print_m2_OBJECTS = $(am_xpr_print_m2_OBJECTS)
xpr_print_m2_LDADD = $(LDADD)
am_xpr_print_m3_OBJECTS = xpr_print_m3.$(OBJEXT)
xpr_print_m3_OBJECTS = $(am_xpr_print_m3_OBJECTS)
xpr_print_m3_LDADD = $(LDADD)
am_xpr_print_m4_OBJECTS = xpr_print_m4.$(OBJEXT)
xpr_print_m4_OBJECTS = $(am_xpr_print_m4_OBJECTS)
xpr_print_m4_LDADD = $(LDADD)
am_xpr_print_mv1_OBJECTS = xpr_print_mv1.$(OBJEXT)
xpr_print_mv1_OBJECTS = $(am_xpr_print_mv1_OBJECTS)
xpr_print_mv1_LDADD = $(LDADD)
am_xpr_print_mv2_OBJECTS = xpr_print_mv2.$(OBJEXT)
xpr_print_mv2_OBJECTS = $(am_xpr_print_mv2_OBJECTS)
xpr_print_mv2_LDADD = $(LDADD)
am_xpr_print_v1_OBJECTS = xpr_print_v1.$(OBJEXT)
xpr_print_v1_OBJECTS = $(am_xpr_print_v1_OBJECTS)
xpr_print_v1_LDADD = $(LDADD)
am_xpr_print_v2_OBJECTS = xpr_print_v2.$(OBJEXT)
xpr_print_v2_OBJECTS = $(am_xpr_print_v2_OBJECTS)
xpr_print_v2_LDADD = $(LDADD)
am_xpr_print_v3_OBJECTS = xpr_print_v3.$(OBJEXT)
xpr_print_v3_OBJECTS = $(am_xpr_print_v3_OBJECTS)
xpr_print_v3_LDADD = $(LDADD)
am_xpr_print_v4_OBJECTS = xpr_print_v4.$(OBJEXT)
xpr_print_v4_OBJECTS = $(am_xpr_print_v4_OBJECTS)
xpr_print_v4_LDADD = $(LDADD)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/alias.Po ./$(DEPDIR)/aliasing.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/cmm.Po ./$(DEPDIR)/cmv.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/diag.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/frob_matrix_norm.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/hspiess.Po ./$(DEPDIR)/matrix_col.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/mm.Po ./$(DEPDIR)/mv.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/ray.Po ./$(DEPDIR)/redwards.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_m1.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_m2.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_m3.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_m4.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_mv1.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_mv2.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_v1.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_v2.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_v3.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_v4.Po
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(alias_SOURCES) $(aliasing_SOURCES) $(cmm_SOURCES) \
$(cmv_SOURCES) $(diag_SOURCES) $(frob_matrix_norm_SOURCES) \
$(hspiess_SOURCES) $(matrix_col_SOURCES) $(mm_SOURCES) \
$(mv_SOURCES) $(ray_SOURCES) $(redwards_SOURCES) \
$(xpr_print_m1_SOURCES) $(xpr_print_m2_SOURCES) \
$(xpr_print_m3_SOURCES) $(xpr_print_m4_SOURCES) \
$(xpr_print_mv1_SOURCES) $(xpr_print_mv2_SOURCES) \
$(xpr_print_v1_SOURCES) $(xpr_print_v2_SOURCES) \
$(xpr_print_v3_SOURCES) $(xpr_print_v4_SOURCES)
DIST_SOURCES = $(alias_SOURCES) $(aliasing_SOURCES) $(cmm_SOURCES) \
$(cmv_SOURCES) $(diag_SOURCES) $(frob_matrix_norm_SOURCES) \
$(hspiess_SOURCES) $(matrix_col_SOURCES) $(mm_SOURCES) \
$(mv_SOURCES) $(ray_SOURCES) $(redwards_SOURCES) \
$(xpr_print_m1_SOURCES) $(xpr_print_m2_SOURCES) \
$(xpr_print_m3_SOURCES) $(xpr_print_m4_SOURCES) \
$(xpr_print_mv1_SOURCES) $(xpr_print_mv2_SOURCES) \
$(xpr_print_v1_SOURCES) $(xpr_print_v2_SOURCES) \
$(xpr_print_v3_SOURCES) $(xpr_print_v4_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
CPPUNIT_LIBS = @CPPUNIT_LIBS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DOXYGEN = @DOXYGEN@
DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LATEX_BATCHMODE = @LATEX_BATCHMODE@
LATEX_MODE = @LATEX_MODE@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
AM_CXXFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
DISTCLEANFILES = $(EXTRA_PROGRAMS)
xpr_print_v1_SOURCES = xpr_print_v1.cc
xpr_print_v2_SOURCES = xpr_print_v2.cc
xpr_print_v3_SOURCES = xpr_print_v3.cc
xpr_print_v4_SOURCES = xpr_print_v4.cc
xpr_print_m1_SOURCES = xpr_print_m1.cc
xpr_print_m2_SOURCES = xpr_print_m2.cc
xpr_print_m3_SOURCES = xpr_print_m3.cc
xpr_print_m4_SOURCES = xpr_print_m4.cc
xpr_print_mv1_SOURCES = xpr_print_mv1.cc
xpr_print_mv2_SOURCES = xpr_print_mv2.cc
mv_SOURCES = mv.cc
mm_SOURCES = mm.cc
cmv_SOURCES = cmv.cc
cmm_SOURCES = cmm.cc
matrix_col_SOURCES = matrix_col.cc
diag_SOURCES = diag.cc
ray_SOURCES = ray.cc
redwards_SOURCES = redwards.cc
hspiess_SOURCES = hspiess.cc
frob_matrix_norm_SOURCES = frob_matrix_norm.cc
alias_SOURCES = alias.cc
aliasing_SOURCES = aliasing.cc
all: all-am
.SUFFIXES:
.SUFFIXES: .cc .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu examples/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
alias$(EXEEXT): $(alias_OBJECTS) $(alias_DEPENDENCIES)
@rm -f alias$(EXEEXT)
$(CXXLINK) $(alias_LDFLAGS) $(alias_OBJECTS) $(alias_LDADD) $(LIBS)
aliasing$(EXEEXT): $(aliasing_OBJECTS) $(aliasing_DEPENDENCIES)
@rm -f aliasing$(EXEEXT)
$(CXXLINK) $(aliasing_LDFLAGS) $(aliasing_OBJECTS) $(aliasing_LDADD) $(LIBS)
cmm$(EXEEXT): $(cmm_OBJECTS) $(cmm_DEPENDENCIES)
@rm -f cmm$(EXEEXT)
$(CXXLINK) $(cmm_LDFLAGS) $(cmm_OBJECTS) $(cmm_LDADD) $(LIBS)
cmv$(EXEEXT): $(cmv_OBJECTS) $(cmv_DEPENDENCIES)
@rm -f cmv$(EXEEXT)
$(CXXLINK) $(cmv_LDFLAGS) $(cmv_OBJECTS) $(cmv_LDADD) $(LIBS)
diag$(EXEEXT): $(diag_OBJECTS) $(diag_DEPENDENCIES)
@rm -f diag$(EXEEXT)
$(CXXLINK) $(diag_LDFLAGS) $(diag_OBJECTS) $(diag_LDADD) $(LIBS)
frob_matrix_norm$(EXEEXT): $(frob_matrix_norm_OBJECTS) $(frob_matrix_norm_DEPENDENCIES)
@rm -f frob_matrix_norm$(EXEEXT)
$(CXXLINK) $(frob_matrix_norm_LDFLAGS) $(frob_matrix_norm_OBJECTS) $(frob_matrix_norm_LDADD) $(LIBS)
hspiess$(EXEEXT): $(hspiess_OBJECTS) $(hspiess_DEPENDENCIES)
@rm -f hspiess$(EXEEXT)
$(CXXLINK) $(hspiess_LDFLAGS) $(hspiess_OBJECTS) $(hspiess_LDADD) $(LIBS)
matrix_col$(EXEEXT): $(matrix_col_OBJECTS) $(matrix_col_DEPENDENCIES)
@rm -f matrix_col$(EXEEXT)
$(CXXLINK) $(matrix_col_LDFLAGS) $(matrix_col_OBJECTS) $(matrix_col_LDADD) $(LIBS)
mm$(EXEEXT): $(mm_OBJECTS) $(mm_DEPENDENCIES)
@rm -f mm$(EXEEXT)
$(CXXLINK) $(mm_LDFLAGS) $(mm_OBJECTS) $(mm_LDADD) $(LIBS)
mv$(EXEEXT): $(mv_OBJECTS) $(mv_DEPENDENCIES)
@rm -f mv$(EXEEXT)
$(CXXLINK) $(mv_LDFLAGS) $(mv_OBJECTS) $(mv_LDADD) $(LIBS)
ray$(EXEEXT): $(ray_OBJECTS) $(ray_DEPENDENCIES)
@rm -f ray$(EXEEXT)
$(CXXLINK) $(ray_LDFLAGS) $(ray_OBJECTS) $(ray_LDADD) $(LIBS)
redwards$(EXEEXT): $(redwards_OBJECTS) $(redwards_DEPENDENCIES)
@rm -f redwards$(EXEEXT)
$(CXXLINK) $(redwards_LDFLAGS) $(redwards_OBJECTS) $(redwards_LDADD) $(LIBS)
xpr_print_m1$(EXEEXT): $(xpr_print_m1_OBJECTS) $(xpr_print_m1_DEPENDENCIES)
@rm -f xpr_print_m1$(EXEEXT)
$(CXXLINK) $(xpr_print_m1_LDFLAGS) $(xpr_print_m1_OBJECTS) $(xpr_print_m1_LDADD) $(LIBS)
xpr_print_m2$(EXEEXT): $(xpr_print_m2_OBJECTS) $(xpr_print_m2_DEPENDENCIES)
@rm -f xpr_print_m2$(EXEEXT)
$(CXXLINK) $(xpr_print_m2_LDFLAGS) $(xpr_print_m2_OBJECTS) $(xpr_print_m2_LDADD) $(LIBS)
xpr_print_m3$(EXEEXT): $(xpr_print_m3_OBJECTS) $(xpr_print_m3_DEPENDENCIES)
@rm -f xpr_print_m3$(EXEEXT)
$(CXXLINK) $(xpr_print_m3_LDFLAGS) $(xpr_print_m3_OBJECTS) $(xpr_print_m3_LDADD) $(LIBS)
xpr_print_m4$(EXEEXT): $(xpr_print_m4_OBJECTS) $(xpr_print_m4_DEPENDENCIES)
@rm -f xpr_print_m4$(EXEEXT)
$(CXXLINK) $(xpr_print_m4_LDFLAGS) $(xpr_print_m4_OBJECTS) $(xpr_print_m4_LDADD) $(LIBS)
xpr_print_mv1$(EXEEXT): $(xpr_print_mv1_OBJECTS) $(xpr_print_mv1_DEPENDENCIES)
@rm -f xpr_print_mv1$(EXEEXT)
$(CXXLINK) $(xpr_print_mv1_LDFLAGS) $(xpr_print_mv1_OBJECTS) $(xpr_print_mv1_LDADD) $(LIBS)
xpr_print_mv2$(EXEEXT): $(xpr_print_mv2_OBJECTS) $(xpr_print_mv2_DEPENDENCIES)
@rm -f xpr_print_mv2$(EXEEXT)
$(CXXLINK) $(xpr_print_mv2_LDFLAGS) $(xpr_print_mv2_OBJECTS) $(xpr_print_mv2_LDADD) $(LIBS)
xpr_print_v1$(EXEEXT): $(xpr_print_v1_OBJECTS) $(xpr_print_v1_DEPENDENCIES)
@rm -f xpr_print_v1$(EXEEXT)
$(CXXLINK) $(xpr_print_v1_LDFLAGS) $(xpr_print_v1_OBJECTS) $(xpr_print_v1_LDADD) $(LIBS)
xpr_print_v2$(EXEEXT): $(xpr_print_v2_OBJECTS) $(xpr_print_v2_DEPENDENCIES)
@rm -f xpr_print_v2$(EXEEXT)
$(CXXLINK) $(xpr_print_v2_LDFLAGS) $(xpr_print_v2_OBJECTS) $(xpr_print_v2_LDADD) $(LIBS)
xpr_print_v3$(EXEEXT): $(xpr_print_v3_OBJECTS) $(xpr_print_v3_DEPENDENCIES)
@rm -f xpr_print_v3$(EXEEXT)
$(CXXLINK) $(xpr_print_v3_LDFLAGS) $(xpr_print_v3_OBJECTS) $(xpr_print_v3_LDADD) $(LIBS)
xpr_print_v4$(EXEEXT): $(xpr_print_v4_OBJECTS) $(xpr_print_v4_DEPENDENCIES)
@rm -f xpr_print_v4$(EXEEXT)
$(CXXLINK) $(xpr_print_v4_LDFLAGS) $(xpr_print_v4_OBJECTS) $(xpr_print_v4_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alias.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aliasing.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmm.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmv.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diag.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frob_matrix_norm.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hspiess.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrix_col.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mm.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mv.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ray.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/redwards.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m3.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m4.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_mv1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_mv2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v3.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v4.Po@am__quote@
.cc.o:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
.cc.obj:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.cc.lo:
@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool ctags distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-exec install-exec-am \
install-info install-info-am install-man install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am
examples: $(EXTRA_PROGRAMS)
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,33 @@
/*
* $Id: alias.cc,v 1.1 2004/03/26 07:56:32 opetzold Exp $
*
* This example shows the solution of the problem with aliasing
* mentioned at
* http://tvmet.sourceforge.net/notes.html#alias
*/
#include <iostream>
#include <algorithm>
#include <tvmet/Matrix.h>
#include <tvmet/Vector.h>
#include <tvmet/util/Incrementor.h>
using namespace std;
int main()
{
typedef tvmet::Matrix<double, 3, 3> matrix_type;
matrix_type M;
std::generate(M.begin(), M.end(),
tvmet::util::Incrementor<matrix_type::value_type>());
std::cout << "M = " << M << std::endl;
alias(M) = M * trans(M);
std::cout << M << std::endl;
}

View File

@ -0,0 +1,44 @@
/*
* $Id: aliasing.cc,v 1.2 2004/03/26 07:58:06 opetzold Exp $
*
* This example shows the problem with aliasing mentioned at
* http://tvmet.sourceforge.net/notes.html#alias
*/
#include <iostream>
#include <algorithm>
#include <tvmet/Matrix.h>
#include <tvmet/util/Incrementor.h>
using std::cout; using std::endl;
using namespace tvmet;
typedef Matrix<double,3,3> matrix_type;
int main()
{
matrix_type A, B;
matrix_type C;
std::generate(A.begin(), A.end(),
tvmet::util::Incrementor<matrix_type::value_type>());
std::generate(B.begin(), B.end(),
tvmet::util::Incrementor<matrix_type::value_type>());
cout << "A = " << A << endl;
cout << "B = " << B << endl;
// matrix prod without aliasing
C = A * B;
cout << "C = A * B = " << C << endl;
// work around for aliasing
matrix_type temp_A(A);
A = temp_A * B;
cout << "matrix_type temp_A(A);\n"
<< "A = temp_A * B = " << A << endl;
// this shows the aliasing problem
A = A * B;
cout << "A = A * B = " << A << endl;
}

View File

@ -0,0 +1,29 @@
#include <iostream>
#include <complex>
#include <tvmet/Matrix.h>
using namespace tvmet;
using std::cout;
using std::endl;
typedef Matrix<std::complex<double>,3,3> matrix33d;
void testMM(matrix33d& res, const matrix33d& m1, const matrix33d& m2) {
res = m1 * m2;
}
int main()
{
matrix33d m1, m2, m3;
m1 = 1,4,7,
2,5,8,
3,6,9;
m2 = m1;
testMM(m3, m1, m2);
cout << m1 << "\n*\n" << m2 << "\n=";
cout << m3 << endl;
}

View File

@ -0,0 +1,36 @@
#include <iostream>
#include <complex>
#include <tvmet/Matrix.h>
#include <tvmet/Vector.h>
using namespace tvmet;
using std::cout;
using std::endl;
typedef Vector<std::complex<double>,3> vector3d;
typedef Matrix<std::complex<double>,3,3> matrix33d;
#if (defined __ICC )
#pragma warning(disable:1418) // external definition with no prior declaration
#endif
void testMV(vector3d& res, const matrix33d& m, const vector3d& v) {
res = m * v;
}
int main()
{
vector3d v1, vr;
matrix33d m1;
v1 = 1,2,3;
m1 = 1,4,7,
2,5,8,
3,6,9;
testMV(vr, m1, v1);
cout << m1 << " * " << v1 << " =\n";
cout << vr << endl;
}

View File

@ -0,0 +1,32 @@
/* Version: $Id: diag.cc,v 1.1 2003/02/12 19:03:48 opetzold Exp $ */
#include <iostream>
#include <tvmet/Matrix.h>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
typedef Matrix<double,3,3> matrix33d;
typedef Vector<double,3> vector3d;
int main()
{
matrix33d m1, m2(0);
vector3d v1, v2;
m1 = 1,4,7,
2,5,8,
3,6,9;
v1 = diag(m1);
// not yet, since we need to assign an expression/scalar to an expression
// diag(m2) = 1.0;
cout << "M1 = " << m1 << endl;
cout << "diag(M1) = " << v1 << endl;
cout << "identity(M2) = " << m2 << endl;
}

View File

@ -0,0 +1,191 @@
/*
* Tiny Vector Matrix Library
* Dense Vector Matrix Libary of Tiny size using Expression Templates
*
* Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: frob_matrix_norm.cc,v 1.3 2003/11/30 08:26:25 opetzold Exp $
*/
#include <iostream>
#include <tvmet/Matrix.h>
#include <tvmet/xpr/Vector.h>
using namespace std;
template<class T, std::size_t Rows, std::size_t Cols>
double
frob_norm(const tvmet::Matrix<T, Rows, Cols>& M) {
return std::sqrt(M(0,0)*M(0,0) + M(1,0)*M(1,0) + M(2,0)*M(2,0)
+ M(0,1)*M(0,1) + M(1,1)*M(1,1) + M(2,1)*M(2,1)
+ M(0,2)*M(0,2) + M(1,2)*M(1,2) + M(2,2)*M(2,2));
}
namespace tvmet {
template<class T, std::size_t Rows, std::size_t Cols>
typename NumericTraits<T>::float_type
norm(const Matrix<T, Rows, Cols>& M) {
return std::sqrt( sum( diag( MtM_prod(M,M) ) ) );
}
}
int main()
{
typedef tvmet::Matrix<double,3,3> matrix_type;
matrix_type M;
M = 1,2,3,4,5,6,7,8,9;
cout << M << endl;
cout << "handopt norm = " << frob_norm(M) << endl;
cout << "tvmet::norm = " << tvmet::norm(M) << endl;
}
/*
gcc 3.3 produce for the hand optimized frob_norm:
_Z9frob_normIdLj3ELj3EEdRKN5tvmet6MatrixIT_XT0_EXT1_EEE:
.LFB3210:
pushl %ebp
.LCFI6:
movl %esp, %ebp
.LCFI7:
subl $8, %esp
.LCFI8:
movl 8(%ebp), %eax
fldl (%eax)
fldl 24(%eax)
fxch %st(1)
fmul %st(0), %st
fxch %st(1)
fmul %st(0), %st
faddp %st, %st(1)
fldl 48(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fldl 8(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fldl 32(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fldl 56(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fldl 16(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fldl 40(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fldl 64(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fld %st(0)
fsqrt
fucom %st(0)
fnstsw %ax
sahf
jp .L189
jne .L189
fstp %st(1)
.L186:
leave
ret
*/
/*
gcc 3.3 produce the norm function using tvmet 1.3.0:
_ZN5tvmet4normIdLj3ELj3EEENS_13NumericTraitsIT_E10float_typeERKNS_6MatrixIS2_XT0_EXT1_EEE:
.LFB3252:
.L194:
.L198:
.L203:
.L207:
.L212:
.L225:
.L238:
.L251:
pushl %ebp
.LCFI9:
movl %esp, %ebp
.LCFI10:
subl $56, %esp
.LCFI11:
movl 8(%ebp), %edx
leal -24(%ebp), %eax
movl %eax, -12(%ebp)
leal -12(%ebp), %eax
fldl 24(%edx)
fldl 48(%edx)
fldl (%edx)
fxch %st(2)
fmul %st(0), %st
fxch %st(1)
movl %eax, -28(%ebp)
fmul %st(0), %st
fxch %st(2)
movl %edx, -24(%ebp)
movl %edx, -20(%ebp)
fmul %st(0), %st
fldl 8(%edx)
fxch %st(2)
faddp %st, %st(3)
fldl 56(%edx)
fxch %st(2)
fmul %st(0), %st
fxch %st(1)
faddp %st, %st(3)
fldl 32(%edx)
fxch %st(2)
fmul %st(0), %st
fxch %st(2)
fmul %st(0), %st
fldl 16(%edx)
fxch %st(1)
faddp %st, %st(3)
fmul %st(0), %st
fldl 64(%edx)
fxch %st(2)
faddp %st, %st(3)
fldl 40(%edx)
fxch %st(2)
fmul %st(0), %st
fxch %st(2)
fmul %st(0), %st
faddp %st, %st(2)
faddp %st, %st(1)
faddp %st, %st(1)
faddp %st, %st(1)
fld %st(0)
fsqrt
fucom %st(0)
fnstsw %ax
sahf
jp .L265
jne .L265
fstp %st(1)
.L261:
fstpl -8(%ebp)
fldl -8(%ebp)
leave
ret
*/

View File

@ -0,0 +1,37 @@
#include <iostream>
#include <tvmet/Matrix.h>
using namespace std;
int main()
{
tvmet::Matrix<double,3,2> B;
tvmet::Matrix<double,3,3> D;
B =
-0.05, 0,
0, 0.05,
0.05, -0.05;
D =
2000, 1000, 0,
1000, 2000, 0,
0, 0, 500;
cout << "B = " << B << endl;
cout << "D = " << D << endl;
{
tvmet::Matrix<double,2,2> K;
K = trans(B) * D * B;
cout << "K = " << K << endl;
}
{
tvmet::Matrix<double,2,2> K;
K = tvmet::Matrix<double,2,3>(trans(B) * D) * B;
cout << "K = " << K << endl;
}
}

View File

@ -0,0 +1,44 @@
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstdlib>
#include <tvmet/Matrix.h>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
typedef Vector<double,3> vector3d;
typedef Matrix<double,3,3> matrix33d;
int main()
{
matrix33d m1;
std::generate(m1.begin(), m1.end(), std::rand);
vector3d vc0( col(m1, 0) );
vector3d vc1( col(m1, 1) );
vector3d vc2( col(m1, 2) );
vector3d vr0( row(m1, 0) );
vector3d vr1( row(m1, 1) );
vector3d vr2( row(m1, 2) );
cout << std::setw(12) << m1 << endl;
cout << "col vectors:" << endl;
cout << vc0 << endl;
cout << vc1 << endl;
cout << vc2 << endl;
cout << "row vectors:" << endl;
cout << vr0 << endl;
cout << vr1 << endl;
cout << vr2 << endl;
}

View File

@ -0,0 +1,30 @@
#include <iostream>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
typedef Matrix<double,3,3> matrix33d;
#if (defined __ICC )
#pragma warning(disable:1418) // external definition with no prior declaration
#endif
void testMM(matrix33d& res, const matrix33d& m1, const matrix33d& m2) {
res = m1 * m2;
}
int main()
{
matrix33d m1, m2, m3;
m1 = 1,4,7,
2,5,8,
3,6,9;
m2 = m1;
testMM(m3, m1, m2);
cout << m1 << "\n*\n" << m2 << "\n=";
cout << m3 << endl;
}

View File

@ -0,0 +1,36 @@
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstdlib>
#include <tvmet/Matrix.h>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
typedef Vector<double,3> vector3d;
typedef Matrix<double,3,3> matrix33d;
#if (defined __ICC )
#pragma warning(disable:1418) // external definition with no prior declaration
#endif
void testMV(vector3d& res, const matrix33d& m, const vector3d& v) {
res = m * v;
}
int main()
{
vector3d v1, vr;
matrix33d m1;
std::generate(v1.begin(), v1.end(), std::rand);
std::generate(m1.begin(), m1.end(), std::rand);
testMV(vr, m1, v1);
cout << std::setw(12) << m1 << " * " << std::setw(12) << v1 << " =\n";
cout << std::setw(12) << vr << endl;
}

103
tvmet-1.7.1/examples/ray.cc Normal file
View File

@ -0,0 +1,103 @@
#include <iostream>
#include <cmath>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
typedef Vector<double,3> vector3d;
void reflect(vector3d& reflection, const vector3d& ray, const vector3d& surfaceNormal)
{
// The surface normal must be unit length to use this equation.
reflection = ray - 2 * dot(ray,surfaceNormal) * surfaceNormal;
// expression printing
// cout << (ray - 2 * dot(ray,surfaceNormal) * surfaceNormal) << endl;
}
int main()
{
vector3d x, y, z;
// y will be the incident ray
y[0] = 1;
y[1] = 0;
y[2] = -1;
// z is the surface normal
z[0] = 0;
z[1] = 0;
z[2] = 1;
reflect(x, y, z);
cout << "Reflected ray is: [ " << x[0] << " " << x[1] << " " << x[2]
<< " ]" << endl;
}
/*****************************************************************************************
gcc 3.2.0 produce this code (i586) using tvmet 1.3.0:
_Z7reflectRN5tvmet6VectorIdLj3EEERKS1_S4_:
.LFB2757:
.L8:
.L18:
.L22:
.L28:
.L32:
.L38:
.L44:
.L48:
pushl %ebp
.LCFI0:
movl %esp, %ebp
.LCFI1:
leal -32(%ebp), %eax
pushl %ebx
.LCFI2:
subl $52, %esp
.LCFI3:
movl 16(%ebp), %edx
movl %eax, -24(%ebp)
movl 12(%ebp), %ecx
leal -36(%ebp), %eax
movl %eax, -20(%ebp)
movl 8(%ebp), %ebx
leal -24(%ebp), %eax
fldl 8(%edx)
fldl 16(%edx)
fmull 16(%ecx)
fxch %st(1)
movl %eax, -12(%ebp)
leal -52(%ebp), %eax
fmull 8(%ecx)
movl %eax, -48(%ebp)
leal -12(%ebp), %eax
fldl (%edx)
fmull (%ecx)
fxch %st(1)
movl %eax, -44(%ebp)
faddp %st, %st(2)
faddp %st, %st(1)
fadd %st(0), %st
fld %st(0)
fstl -32(%ebp)
fxch %st(1)
fmull (%edx)
fsubrl (%ecx)
fstpl (%ebx)
fld %st(0)
fmull 8(%edx)
fsubrl 8(%ecx)
fstpl 8(%ebx)
fmull 16(%edx)
fsubrl 16(%ecx)
fstpl 16(%ebx)
addl $52, %esp
popl %ebx
popl %ebp
ret
*****************************************************************************************/

View File

@ -0,0 +1,25 @@
/*
* This is a reused case study used as example from Rusell Edwards.
* Works only with > release-1-2-0 due to a missed
* product/operator*(Matrix,XprVector) on releases prior.
* It shows a possible use of chained expressions.
*/
#include <iostream>
#include <tvmet/Matrix.h>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
int main() {
Matrix<float,3,3> eigenvecs;
Matrix<float,3,3> M;
eigenvecs = 1,2,3,4,5,6,7,8,9;
M = 10,20,30,40,50,60,70,80,90;
Vector<float,3> ev0( M * col(eigenvecs, 0));
cout << "ev0 = " << ev0 << endl;
}

View File

@ -0,0 +1,21 @@
#include <iostream>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
int main() {
// Matrix stuff I
Matrix<double,3,3> m1, m2, m3;
m1 = 1,2,3,
4,5,6,
7,8,9;
m2 = trans(m1);
cout << "Xpr Level printing of "
<< m1 << "\n*\n" << m2 <<"\nresults into:\n";
cout << m1*m2 << endl;
cout << "The result =\n";
m3 = m1*m2;
cout << m3 << endl << endl;
}

View File

@ -0,0 +1,21 @@
#include <iostream>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
int main() {
// Matrix stuff II (unary functions)
Matrix<double,3,3> m1, m2, m3;
m1 = 1,2,3,
4,5,6,
7,8,9;
m2 = trans(m1);
cout << "Xpr Level printing of "
<< "sqrt(\n" << m1 <<"):\n";
cout << sqrt(m1) << endl;
cout << "The result = \n";
m3 = sqrt(m1);
cout << m3 << endl << endl;
}

View File

@ -0,0 +1,21 @@
#include <iostream>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
int main() {
// Matrix stuff III (binary functions)
Matrix<double,3,3> m1, m2, m3;
m1 = 1,2,3,
4,5,6,
7,8,9;
m2 = trans(m1);
cout << "Xpr Level printing of "
<< "pow(\n" << m1 << ", " << m2 << "):\n";
cout << pow(m1, m2) << endl;
cout << "The result = \n";
m3 = pow(m1, m2);
cout << m3 << endl << endl;
}

View File

@ -0,0 +1,21 @@
#include <iostream>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
int main() {
// Matrix stuff IV (binary functions with pod)
Matrix<double,3,3> m1, m2, m3;
m1 = 1,2,3,
4,5,6,
7,8,9;
m2 = trans(m1);
cout << "Xpr Level printing of "
<< "pow(\n" << m1 << ", " << 3 << "):\n";
cout << pow(m1, 3) << endl;
cout << "The result = \n";
m3 = pow(m1, 3);
cout << m3 << endl << endl;
}

View File

@ -0,0 +1,26 @@
#include <iostream>
#include <tvmet/Vector.h>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
int main() {
// Matrix Vector stuff I
Vector<double,3> v1(1,2,3), v2(v1);
Vector<double,3> v3(0);
Matrix<double,3,3> m1, m2, m3;
m1 = 1,2,3,
4,5,6,
7,8,9;
m2 = trans(m1);
cout << "Xpr Level printing of "
<< m1 << "\n* " << v1 <<"\nresults into:\n";
cout << m1*v1 << endl;
cout << "The result =\n";
v3 = m1*v1;
cout << v3 << endl << endl;
}

View File

@ -0,0 +1,26 @@
#include <iostream>
#include <tvmet/Vector.h>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
int main() {
// Matrix Vector stuff II
Vector<double,3> v1(1,2,3), v2(v1);
Vector<double,3> v3(0);
Matrix<double,3,3> m1, m2, m3;
m1 = 1,2,3,
4,5,6,
7,8,9;
m2 = trans(m1);
cout << "Xpr Level printing of "
<< "sqrt(\n" << m1 << "\n* " << v1 << ")\nresults into:\n";
cout << sqrt(m1*v1) << endl;
cout << "The result =\n";
v3 = sqrt(m1*v1);
cout << v3 << endl << endl;
}

View File

@ -0,0 +1,19 @@
#include <iostream>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
int main() {
// Vector stuff I
Vector<double,3> v1(1,2,3), v2(v1);
Vector<double,3> v3(0);
cout << "Xpr Level printing of "
<< v1 << " * " << v2 <<":\n";
cout << v1*v2 << endl;
cout << "The result = \n";
v3 = v1*v2;
cout << v3 << endl << endl;
}

View File

@ -0,0 +1,19 @@
#include <iostream>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
int main() {
// Vector stuff II (unary functions)
Vector<double,3> v1(1,2,3), v2(v1);
Vector<double,3> v3(0);
cout << "Xpr Level printing of "
<< "sqrt(" << v1 <<"):\n";
cout << sqrt(v1) << endl;
cout << "The result = \n";
v3 = sqrt(v1);
cout << v3 << endl << endl;
}

View File

@ -0,0 +1,19 @@
#include <iostream>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
int main() {
// Vector stuff III (binary functions)
Vector<double,3> v1(1,2,3), v2(v1);
Vector<double,3> v3(0);
cout << "Xpr Level printing of "
<< "pow(" << v1 << ", " << v2 << "):\n";
cout << pow(v1, v2) << endl;
cout << "The result = \n";
v3 = pow(v1, v2);
cout << v3 << endl << endl;
}

View File

@ -0,0 +1,19 @@
#include <iostream>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
int main() {
// Vector stuff IV (binary functions with pod)
Vector<double,3> v1(1,2,3), v2(v1);
Vector<double,3> v3(0);
cout << "Xpr Level printing of "
<< "pow(" << v1 << ", " << 3 << "):\n";
cout << pow(v1, 3) << endl;
cout << "The result = \n";
v3 = pow(v1, 3);
cout << v3 << endl << endl;
}

View File

@ -0,0 +1,3 @@
# $Id: Makefile.am,v 1.2 2004/04/12 21:50:35 opetzold Exp $
SUBDIRS = $(PACKAGE)

View File

@ -0,0 +1,477 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# $Id: Makefile.am,v 1.2 2004/04/12 21:50:35 opetzold Exp $
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_triplet = @host@
subdir = include
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
$(top_srcdir)/config/ac_cxx_have_complex.m4 \
$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
$(top_srcdir)/config/ac_cxx_typename.m4 \
$(top_srcdir)/config/ac_set_compiler.m4 \
$(top_srcdir)/config/op_doxygen_doc.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
CONFIG_HEADER = $(top_builddir)/config/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
install-recursive installcheck-recursive installdirs-recursive \
pdf-recursive ps-recursive uninstall-info-recursive \
uninstall-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
CPPUNIT_LIBS = @CPPUNIT_LIBS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DOXYGEN = @DOXYGEN@
DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LATEX_BATCHMODE = @LATEX_BATCHMODE@
LATEX_MODE = @LATEX_MODE@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
SUBDIRS = $(PACKAGE)
all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu include/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if (etags --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
else \
include_option=--include; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| mkdir "$(distdir)/$$subdir" \
|| exit 1; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="../$(top_distdir)" \
distdir="../$(distdir)/$$subdir" \
distdir) \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-libtool \
distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
info: info-recursive
info-am:
install-data-am:
install-exec-am:
install-info: install-info-recursive
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am: uninstall-info-am
uninstall-info: uninstall-info-recursive
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
clean clean-generic clean-libtool clean-recursive ctags \
ctags-recursive distclean distclean-generic distclean-libtool \
distclean-recursive distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-exec install-exec-am install-info \
install-info-am install-man install-strip installcheck \
installcheck-am installdirs installdirs-am maintainer-clean \
maintainer-clean-generic maintainer-clean-recursive \
mostlyclean mostlyclean-generic mostlyclean-libtool \
mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
uninstall uninstall-am uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,127 @@
/*
* Tiny Vector Matrix Library
* Dense Vector Matrix Libary of Tiny size using Expression Templates
*
* Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: AliasProxy.h,v 1.4 2004/06/10 16:36:55 opetzold Exp $
*/
#ifndef TVMET_ALIAS_PROXY_H
#define TVMET_ALIAS_PROXY_H
namespace tvmet {
/** forwards */
template<class E> class AliasProxy;
/**
* \brief Simplify syntax for alias Matrices and Vectors,
* where aliasing left hand values appear in the
* expression.
* \par Example:
* \code
* typedef tvmet::Matrix<double, 10, 10> matrix_type;
* matrix_type m;
* ...
* alias(m) += trans(m);
* \endcode
* \sa AliasProxy
* \sa Some Notes \ref alias
*/
template<class E>
AliasProxy<E> alias(E& expr) { return AliasProxy<E>(expr); }
/**
* \class AliasProxy AliasProxy.h "tvmet/AliasProxy.h"
* \brief Assign proxy for alias Matrices and Vectors.
*
* A short lived object to provide simplified alias syntax.
* Only the friend function alias is allowed to create
* such a object. The proxy calls the appropriate member
* alias_xyz() which have to use temporaries to avoid
* overlapping memory regions.
* \sa alias
* \sa Some Notes \ref alias
* \note Thanks to ublas-dev group, where the principle idea
* comes from.
*/
template<class E>
class AliasProxy
{
AliasProxy(const AliasProxy&);
AliasProxy& operator=(const AliasProxy&);
friend AliasProxy<E> alias<>(E& expr);
public:
AliasProxy(E& expr) : m_expr(expr) { }
template<class E2>
E& operator=(const E2& expr) {
return m_expr.alias_assign(expr);
}
template<class E2>
E& operator+=(const E2& expr) {
return m_expr.alias_add_eq(expr);
}
template<class E2>
E& operator-=(const E2& expr) {
return m_expr.alias_sub_eq(expr);
}
template<class E2>
E& operator*=(const E2& expr) {
return m_expr.alias_mul_eq(expr);
}
template<class E2>
E& operator/=(const E2& expr) {
return m_expr.alias_div_eq(expr);
}
private:
E& m_expr;
};
#if 0
namespace element_wise {
// \todo to write
template<class E, class E2>
E& operator/=(AliasProxy<E>& proxy, const E2& rhs) {
return proxy.div_upd(rhs);
}
}
#endif
} // namespace tvmet
#endif /* TVMET_ALIAS_PROXY_H */
// Local Variables:
// mode:C++
// End:

View File

@ -0,0 +1,303 @@
/*
* Tiny Vector Matrix Library
* Dense Vector Matrix Libary of Tiny size using Expression Templates
*
* Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: BinaryFunctionals.h,v 1.19 2004/10/04 11:40:46 opetzold Exp $
*/
#ifndef TVMET_BINARY_FUNCTIONAL_H
#define TVMET_BINARY_FUNCTIONAL_H
namespace tvmet {
/**
* \class Fcnl_assign BinaryFunctionals.h "tvmet/BinaryFunctionals.h"
* \brief Binary operator for assign operations.
*
* Unfortunally we have sometimes to cast on assign operations e.g.,
* on assign on different POD. So we avoid warnings.
*/
template <class T1, class T2>
struct Fcnl_assign : public BinaryFunctional {
static inline
void apply_on(T1& _tvmet_restrict lhs, T2 rhs) {
lhs = static_cast<T1>(rhs);
}
static
void print_xpr(std::ostream& os, std::size_t l=0) {
os << IndentLevel(l) << "fcnl_assign<T1="
<< typeid(T1).name() << ", T2=" << typeid(T2).name() << ">,"
<< std::endl;
}
};
/** \class Fcnl_add_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_sub_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_mul_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_div_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_mod_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_xor_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_and_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_or_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_shl_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_shr_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
#define TVMET_IMPLEMENT_MACRO(NAME, OP) \
template <class T1, class T2> \
struct Fcnl_##NAME : public BinaryFunctional { \
typedef void value_type; \
\
static inline \
void apply_on(T1& _tvmet_restrict lhs, T2 rhs) { \
lhs OP rhs; \
} \
\
static \
void print_xpr(std::ostream& os, std::size_t l=0) { \
os << IndentLevel(l) \
<< "Fcnl_" << #NAME << "<T1=" \
<< typeid(T1).name() << ", T2=" << typeid(T2).name() << ">," \
<< std::endl; \
} \
};
TVMET_IMPLEMENT_MACRO(add_eq, +=)
TVMET_IMPLEMENT_MACRO(sub_eq, -=)
TVMET_IMPLEMENT_MACRO(mul_eq, *=)
TVMET_IMPLEMENT_MACRO(div_eq, /=)
TVMET_IMPLEMENT_MACRO(mod_eq, %=)
TVMET_IMPLEMENT_MACRO(xor_eq, ^=)
TVMET_IMPLEMENT_MACRO(and_eq, &=)
TVMET_IMPLEMENT_MACRO(or_eq, |=)
TVMET_IMPLEMENT_MACRO(shl_eq, <<=)
TVMET_IMPLEMENT_MACRO(shr_eq, >>=)
#undef TVMET_IMPLEMENT_MACRO
/** \class Fcnl_add BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_sub BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_mul BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_div BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_mod BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_bitxor BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_bitand BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_bitor BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_shl BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_shr BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
#define TVMET_IMPLEMENT_MACRO(NAME, OP) \
template <class T1, class T2> \
struct Fcnl_##NAME : public BinaryFunctional { \
typedef typename PromoteTraits<T1, T2>::value_type value_type; \
\
static inline \
value_type apply_on(T1 lhs, T2 rhs) { \
return lhs OP rhs; \
} \
\
static \
void print_xpr(std::ostream& os, std::size_t l=0) { \
os << IndentLevel(l) \
<< "Fcnl_" << #NAME << "<T1=" \
<< typeid(T1).name() << ", T2=" << typeid(T2).name() << ">," \
<< std::endl; \
} \
};
TVMET_IMPLEMENT_MACRO(add, +)
TVMET_IMPLEMENT_MACRO(sub, -)
TVMET_IMPLEMENT_MACRO(mul, *)
TVMET_IMPLEMENT_MACRO(div, /)
TVMET_IMPLEMENT_MACRO(mod, %)
TVMET_IMPLEMENT_MACRO(bitxor, ^)
TVMET_IMPLEMENT_MACRO(bitand, &)
TVMET_IMPLEMENT_MACRO(bitor, |)
TVMET_IMPLEMENT_MACRO(shl, <<)
TVMET_IMPLEMENT_MACRO(shr, >>)
#undef TVMET_IMPLEMENT_MACRO
/** \class Fcnl_greater BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_greater_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_less BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_less_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_not_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_and BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_or BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
#define TVMET_IMPLEMENT_MACRO(NAME, OP) \
template <class T1, class T2> \
struct Fcnl_##NAME : public BinaryFunctional { \
typedef bool value_type; \
\
static inline \
bool apply_on(T1 lhs, T2 rhs) { \
return lhs OP rhs; \
} \
\
static \
void print_xpr(std::ostream& os, std::size_t l=0) { \
os << IndentLevel(l) \
<< "Fcnl_" << #NAME << "<T1=" \
<< typeid(T1).name() << ", T2=" << typeid(T2).name() << ">," \
<< std::endl; \
} \
};
TVMET_IMPLEMENT_MACRO(greater, >)
TVMET_IMPLEMENT_MACRO(less, <)
TVMET_IMPLEMENT_MACRO(greater_eq, >=)
TVMET_IMPLEMENT_MACRO(less_eq, <=)
TVMET_IMPLEMENT_MACRO(eq, ==)
TVMET_IMPLEMENT_MACRO(not_eq, !=)
TVMET_IMPLEMENT_MACRO(and, &&)
TVMET_IMPLEMENT_MACRO(or, ||)
#undef TVMET_IMPLEMENT_MACRO
/** \class Fcnl_atan2 BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_fmod BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_pow BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
#define TVMET_IMPLEMENT_MACRO(NAME) \
template <class T1, class T2> \
struct Fcnl_##NAME : public BinaryFunctional { \
typedef typename PromoteTraits<T1, T2>::value_type value_type; \
\
static inline \
value_type apply_on(T1 lhs, T2 rhs) { \
return TVMET_STD_SCOPE(NAME)(lhs, rhs); \
} \
\
static \
void print_xpr(std::ostream& os, std::size_t l=0) { \
os << IndentLevel(l) \
<< "Fcnl_" << #NAME << "<T1=" \
<< typeid(T1).name() << ", T2=" << typeid(T2).name() << ">," \
<< std::endl; \
} \
};
TVMET_IMPLEMENT_MACRO(atan2)
TVMET_IMPLEMENT_MACRO(fmod)
TVMET_IMPLEMENT_MACRO(pow)
#undef TVMET_IMPLEMENT_MACRO
/** \class Fcnl_drem BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_hypot BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_jn BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
/** \class Fcnl_yn BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
#define TVMET_IMPLEMENT_MACRO(NAME) \
template <class T1, class T2> \
struct Fcnl_##NAME : public BinaryFunctional { \
typedef typename PromoteTraits<T1, T2>::value_type value_type; \
\
static inline \
value_type apply_on(T1 lhs, T2 rhs) { \
return TVMET_GLOBAL_SCOPE(NAME)(lhs, rhs); \
} \
\
static \
void print_xpr(std::ostream& os, std::size_t l=0) { \
os << IndentLevel(l) \
<< "Fcnl_" << #NAME << "<T1=" \
<< typeid(T1).name() << ", T2=" << typeid(T2).name() << ">," \
<< std::endl; \
} \
};
TVMET_IMPLEMENT_MACRO(drem)
TVMET_IMPLEMENT_MACRO(hypot)
TVMET_IMPLEMENT_MACRO(jn)
TVMET_IMPLEMENT_MACRO(yn)
#undef TVMET_IMPLEMENT_MACRO
#if defined(TVMET_HAVE_COMPLEX)
/**
* \class Fcnl_polar BinaryFunctionals.h "tvmet/BinaryFunctionals.h"
* \brief %Functional for polar.
*/
template <class T1, class T2> struct Fcnl_polar : public BinaryFunctional { };
/**
* \class Fcnl_polar<T,T> BinaryFunctionals.h "tvmet/BinaryFunctionals.h"
* \brief %Functional for polar.
* \note This functional is partialy specialized due to the declaration
* of %polar in namespace std <tt>complex<T> polar(T, T)</tt>.
* This means especially that type promotion isn't avaible here.
*/
template <class T>
struct Fcnl_polar<T,T> : public BinaryFunctional {
typedef std::complex<T> value_type;
static inline
value_type apply_on(T lhs, T rhs) {
return std::polar(lhs, rhs);
}
static
void print_xpr(std::ostream& os, std::size_t l=0) {
os << IndentLevel(l) << "Fcnl_polar<T1="
<< typeid(T).name() << ", T2=" << typeid(T).name() << ">,"
<< std::endl;
}
};
#endif // defined(TVMET_HAVE_COMPLEX)
/**
* \class Fcnl_swap BinaryFunctionals.h "tvmet/BinaryFunctionals.h"
* \brief Binary operator for swapping values using temporaries.
* \todo check for std::swap implementation; todo before LUdecomp
*/
template <class T1, class T2>
struct Fcnl_swap : public BinaryFunctional {
static inline
void apply_on(T1& _tvmet_restrict lhs, T2& _tvmet_restrict rhs) {
typedef typename PromoteTraits<T1, T2>::value_type temp_type;
temp_type temp(lhs);
lhs = static_cast<T1>(rhs);
rhs = static_cast<T2>(temp);
}
static
void print_xpr(std::ostream& os, std::size_t l=0) {
os << IndentLevel(l) << "Fcnl_swap<T1="
<< typeid(T1).name() << ", T2" << typeid(T2).name() << ">,"
<< std::endl;
}
};
} // namespace tvmet
#endif // TVMET_BINARY_FUNCTIONAL_H
// Local Variables:
// mode:C++
// End:

View File

@ -0,0 +1,163 @@
/*
* Tiny Vector Matrix Library
* Dense Vector Matrix Libary of Tiny size using Expression Templates
*
* Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: CommaInitializer.h,v 1.14 2005/03/02 12:14:22 opetzold Exp $
*/
#ifndef TVMET_COMMA_INITIALIZER_H
#define TVMET_COMMA_INITIALIZER_H
#include <tvmet/CompileTimeError.h>
namespace tvmet {
/**
* \class CommaInitializer CommaInitializer.h "tvmet/CommaInitializer.h"
* \brief Initialize classes using a comma separated lists.
*
* The comma operator is called when it appears next to an object of
* the type the comma is defined for. However, "operator," is not called
* for function argument lists, only for objects that are out in the open,
* separated by commas (Thinking C++
* <a href=http://www.ida.liu.se/~TDDA14/online/v1ticpp/Chapter12.html>
* Ch.12: Operator comma</a>).
*
* This implementation uses the same technique as described in Todd Veldhuizen
* Techniques for Scientific C++
* <a href=http://extreme.indiana.edu/~tveldhui/papers/techniques/techniques01.html#l43>
* chapter 1.11 Comma overloading</a>.
*
* The initializer list is avaible after instanciation of the object,
* therefore use it like:
* \code
* vector3d t;
* t = 1.0, 2.0, 3.0;
* \endcode
* It's evaluated to (((t = 1.0), 2.0), 3.0)
*
* For matrizes the initilization is done row wise.
*
* If the comma separted list of values longer then the size of the vector
* or matrix a compile time error will occour. Otherwise the pending values
* will be written random into the memory.
*
*/
template<class Obj, std::size_t LEN>
class CommaInitializer
{
CommaInitializer();
CommaInitializer& operator=(const CommaInitializer&);
private:
/**
* \class Initializer
* \brief Helper fo recursive overloaded comma operator.
*/
template<class T, std::size_t N> class Initializer
{
Initializer();
Initializer& operator=(const Initializer&);
public:
typedef T value_type;
typedef T* iterator;
public:
Initializer(iterator iter) : m_iter(iter) { }
/** Overloads the comma operator for recursive assign values from comma
separated list. */
Initializer<value_type, N+1> operator,(value_type rhs)
{
TVMET_CT_CONDITION(N < LEN, CommaInitializerList_is_too_long)
*m_iter = rhs;
return Initializer<value_type, N+1>(m_iter + 1);
}
private:
iterator m_iter;
};
public:
typedef typename Obj::value_type value_type;
typedef value_type* iterator;
public:
CommaInitializer(const CommaInitializer& rhs)
: m_object(rhs.m_object),
m_data(rhs.m_data),
m_wipeout_on_destruct(true)
{
rhs.disable();
}
/** Constructor used by Vector or Matrix operator(value_type rhs) */
CommaInitializer(Obj& obj, value_type x)
: m_object(obj),
m_data(x),
m_wipeout_on_destruct(true)
{ }
/** Destructs and assigns the comma separated value. */
~CommaInitializer() {
if(m_wipeout_on_destruct) m_object.assign_value(m_data);
}
/** Overloaded comma operator, called only once for the first occoured comma. This
means the first value is assigned by %operator=() and the 2nd value after the
comma. Therfore we call the %Initializer::operator,() for the list starting
after the 2nd. */
Initializer<value_type, 2> operator,(value_type rhs);
void disable() const { m_wipeout_on_destruct = false; }
private:
Obj& m_object;
value_type m_data;
mutable bool m_wipeout_on_destruct;
};
/*
* Implementation
*/
template<class Obj, std::size_t LEN>
typename CommaInitializer<Obj, LEN>::template Initializer<typename Obj::value_type, 2>
CommaInitializer<Obj, LEN>::operator,(typename Obj::value_type rhs)
{
m_wipeout_on_destruct = false;
iterator iter1 = m_object.data();
*iter1 = m_data;
iterator iter2 = iter1 + 1;
*iter2 = rhs;
return Initializer<value_type, 2>(iter2 + 1);
}
} // namespace tvmet
#endif // TVMET_COMMA_INITIALIZER_H
// Local Variables:
// mode:C++
// End:

View File

@ -0,0 +1,59 @@
/*
* Tiny Vector Matrix Library
* Dense Vector Matrix Libary of Tiny size using Expression Templates
*
* Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: CompileTimeError.h,v 1.7 2003/11/30 08:26:25 opetzold Exp $
*/
#ifndef TVMET_COMPILE_TIME_ERROR_H
#define TVMET_COMPILE_TIME_ERROR_H
namespace tvmet {
/**
* \class CompileTimeError CompileTimeError.h "tvmet/CompileTimeError.h"
* \brief Compile Time Assertation classes.
*/
template<bool> struct CompileTimeError;
/**
* \class CompileTimeError<true> CompileTimeError.h "tvmet/CompileTimeError.h"
* \brief Specialized Compile Time Assertation for successfully condition.
* This results in a compiler pass.
*/
template<> struct CompileTimeError<true> { };
/**
* \def TVMET_CT_CONDITION(XPR, MSG)
* \brief Simplify the Compile Time Assertation by using an expression
* Xpr and an error message MSG.
*/
#define TVMET_CT_CONDITION(XPR, MSG) { \
CompileTimeError<(XPR)> tvmet_ERROR_##MSG; \
(void)tvmet_ERROR_##MSG; \
}
} // namespace tvmet
#endif // TVMET_COMPILE_TIME_ERROR_H
// Local Variables:
// mode:C++
// End:

View File

@ -0,0 +1,107 @@
/*
* Tiny Vector Matrix Library
* Dense Vector Matrix Libary of Tiny size using Expression Templates
*
* Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: Extremum.h,v 1.6 2003/11/30 08:26:25 opetzold Exp $
*/
#ifndef TVMET_EXTREMUM_H
#define TVMET_EXTREMUM_H
namespace tvmet {
/**
* \class matrix_tag Extremum.h "tvmet/Extremum.h"
* \brief For use with Extremum to simplify max handling.
* This allows the min/max functions to return an Extremum object.
*/
struct matrix_tag { };
/**
* \class vector_tag Extremum.h "tvmet/Extremum.h"
* \brief For use with Extremum to simplify max handling.
* This allows the min/max functions to return an Extremum object.
*/
struct vector_tag { };
/**
* \class Extremum Extremum.h "tvmet/Extremum.h"
* \brief Generell class for storing extremums determined by min/max.
*/
template<class T1, class T2, class Tag>
class Extremum { };
/**
* \class Extremum<T1, T2, vector_tag> Extremum.h "tvmet/Extremum.h"
* \brief Partial specialzed for vectors to store extremums by value and index.
*/
template<class T1, class T2>
class Extremum<T1, T2, vector_tag>
{
public:
typedef T1 value_type;
typedef T2 index_type;
public:
Extremum(value_type value, index_type index)
: m_value(value), m_index(index) { }
value_type value() const { return m_value; }
index_type index() const { return m_index; }
private:
value_type m_value;
index_type m_index;
};
/**
* \class Extremum<T1, T2, matrix_tag> Extremum.h "tvmet/Extremum.h"
* \brief Partial specialzed for matrix to store extremums by value, row and column.
*/
template<class T1, class T2>
class Extremum<T1, T2, matrix_tag>
{
public:
typedef T1 value_type;
typedef T2 index_type;
public:
Extremum(value_type value, index_type row, index_type col)
: m_value(value), m_row(row), m_col(col) { }
value_type value() const { return m_value; }
index_type row() const { return m_row; }
index_type col() const { return m_col; }
private:
value_type m_value;
index_type m_row, m_col;
};
} // namespace tvmet
#endif // TVMET_EXTREMUM_H
// Local Variables:
// mode:C++
// End:

View File

@ -0,0 +1,87 @@
/*
* Tiny Vector Matrix Library
* Dense Vector Matrix Libary of Tiny size using Expression Templates
*
* Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: Functional.h,v 1.7 2004/09/16 09:14:18 opetzold Exp $
*/
#ifndef TVMET_FUNCTIONAL_H
#define TVMET_FUNCTIONAL_H
#include <tvmet/TypePromotion.h>
namespace tvmet {
/**
* \class Functional Functional.h "tvmet/Functional.h"
* \brief Base class for all binary und unary functionals.
*
* All functional operators and functions have a static apply
* member function for evaluating the expressions inside.
*/
struct Functional { };
/**
* \class BinaryFunctional Functional.h "tvmet/Functional.h"
* \brief Base class for all binary functions.
* \note Used for collecting classes for doxygen.
*/
struct BinaryFunctional : public Functional { };
/**
* \class UnaryFunctional Functional.h "tvmet/Functional.h"
* \brief Base class for all unary functions.
* \note Used for collecting classes for doxygen.
*/
struct UnaryFunctional : public Functional { };
/*
* some macro magic need below
*/
/**
* \def TVMET_STD_SCOPE(x)
* \brief Simple macro to allow using macros for namespace std functions.
*/
#define TVMET_STD_SCOPE(x) std::x
/**
* \def TVMET_GLOBAL_SCOPE(x)
* \brief Simple macro to allow using macros for global namespace functions.
*/
#define TVMET_GLOBAL_SCOPE(x) ::x
} // namespace tvmet
#include <tvmet/BinaryFunctionals.h>
#include <tvmet/UnaryFunctionals.h>
#endif // TVMET_FUNCTIONAL_H
// Local Variables:
// mode:C++
// End:

View File

@ -0,0 +1,68 @@
/*
* Tiny Vector Matrix Library
* Dense Vector Matrix Libary of Tiny size using Expression Templates
*
* Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: Io.h,v 1.3 2004/04/30 16:03:38 opetzold Exp $
*/
#ifndef TVMET_IO_H
#define TVMET_IO_H
namespace tvmet {
/**
* \class IoPrintHelper Io.h "tvmet/Io.h"
* \brief Determines the number of digits regarding the sign of the
* container.
* This class is nesessary due to the complex type and the
* function min(), which are not defined for this type.
* So we have to dispatch between pod and complex types
* to get an information about the extra space for signs.
*/
template<class C>
class IoPrintHelper {
IoPrintHelper();
IoPrintHelper(const IoPrintHelper&);
IoPrintHelper& operator=(const IoPrintHelper&);
private:
static std::streamsize width(const C& e) {
std::streamsize w = static_cast<std::streamsize>(std::log10(max(abs(e)))+1);
return w > 0 ? w : 0;
}
public:
static std::streamsize width(dispatch<true>, const C& e) {
return width(e);
}
static std::streamsize width(dispatch<false>, const C& e) {
std::streamsize w = width(e);
if(min(e) < 0) return w+1;
else return w;
}
};
};
#endif /* TVMET_IO_H */
// Local Variables:
// mode:C++
// End:

Some files were not shown because too many files have changed in this diff Show More