c935902554e5c1bed26129a9a828a71285dd5b05
[blender.git] / intern / iksolver / intern / TNT / tntreqs.h
1 /**
2  * $Id$
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31
32 /*
33
34 *
35 * Template Numerical Toolkit (TNT): Linear Algebra Module
36 *
37 * Mathematical and Computational Sciences Division
38 * National Institute of Technology,
39 * Gaithersburg, MD USA
40 *
41 *
42 * This software was developed at the National Institute of Standards and
43 * Technology (NIST) by employees of the Federal Government in the course
44 * of their official duties. Pursuant to title 17 Section 105 of the
45 * United States Code, this software is not subject to copyright protection
46 * and is in the public domain.  The Template Numerical Toolkit (TNT) is
47 * an experimental system.  NIST assumes no responsibility whatsoever for
48 * its use by other parties, and makes no guarantees, expressed or implied,
49 * about its quality, reliability, or any other characteristic.
50 *
51 * BETA VERSION INCOMPLETE AND SUBJECT TO CHANGE
52 * see http://math.nist.gov/tnt for latest updates.
53 *
54 */
55
56
57
58 // The requirements for a bare-bones vector class:
59 //
60 //
61 //   o) must have 0-based [] indexing for const and
62 //          non-const objects  (i.e. operator[] defined)
63 //
64 //   o) must have size() method to denote the number of
65 //          elements
66 //   o) must clean up after itself when destructed
67 //          (i.e. no memory leaks)
68 //
69 //   -) must have begin() and end() methods  (The begin()
70 //          method is necessary, because relying on 
71 //          &v_[0] may not work on a empty vector (i.e. v_ is NULL.)
72 //
73 //   o) must be templated
74 //   o) must have X::value_type defined to be the types of elements
75 //   o) must have X::X(const &x) copy constructor (by *value*)
76 //   o) must have X::X(int N) constructor to N-length vector
77 //          (NOTE: this constructor need *NOT* initalize elements)
78 //
79 //   -) must have X::X(int N, T scalar) constructor to initalize
80 //          elements to value of "scalar".
81 //
82 //       ( removed, because valarray<> class uses (scalar, N)  rather
83 //              than (N, scalar) )
84 //   -) must have X::X(int N, const T* scalars) constructor to copy from
85 //              any C linear array
86 //
87 //         ( removed, because of same reverse order of valarray<> )
88 //
89 //   o) must have assignment A=B, by value
90 //
91 //  NOTE: this class is *NOT* meant to be derived from,
92 //  so its methods (particularly indexing) need not be
93 //  declared virtual.
94 //
95 //
96 //  Some things it *DOES NOT* need to do are
97 //
98 //  o) bounds checking
99 //  o) array referencing (e.g. reference counting)
100 //  o) support () indexing
101 //  o) I/O 
102 //