Initial revision
[blender.git] / intern / iksolver / intern / TNT / index.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 // Vector/Matrix/Array Index Module  
59
60 #ifndef INDEX_H
61 #define INDEX_H
62
63 #include "subscript.h"
64
65 namespace TNT
66 {
67
68 class Index1D
69 {
70     Subscript lbound_;
71     Subscript ubound_;
72
73     public:
74
75     Subscript lbound() const { return lbound_; }
76     Subscript ubound() const { return ubound_; }
77
78     Index1D(const Index1D &D) : lbound_(D.lbound_), ubound_(D.ubound_) {}
79     Index1D(Subscript i1, Subscript i2) : lbound_(i1), ubound_(i2) {}
80
81     Index1D & operator=(const Index1D &D)
82     {
83         lbound_ = D.lbound_;
84         ubound_ = D.ubound_;
85         return *this;
86     }
87
88 };
89
90 inline Index1D operator+(const Index1D &D, Subscript i)
91 {
92     return Index1D(i+D.lbound(), i+D.ubound());
93 }
94
95 inline Index1D operator+(Subscript i, const Index1D &D)
96 {
97     return Index1D(i+D.lbound(), i+D.ubound());
98 }
99
100
101
102 inline Index1D operator-(Index1D &D, Subscript i)
103 {
104     return Index1D(D.lbound()-i, D.ubound()-i);
105 }
106
107 inline Index1D operator-(Subscript i, Index1D &D)
108 {
109     return Index1D(i-D.lbound(), i-D.ubound());
110 }
111
112 } // namespace TNT
113
114 #endif
115