source: Sophya/trunk/Poubelle/DPC:FitsIOServer/Blitz/blitz/traversal.h

Last change on this file was 658, checked in by ansari, 26 years ago

no message

File size: 4.0 KB
Line 
1/***************************************************************************
2 * blitz/traversal.h Declaration of the TraversalOrder classes
3 *
4 * $Id: traversal.h,v 1.1.1.1 1999-11-26 16:37:05 ansari Exp $
5 *
6 * Copyright (C) 1997,1998 Todd Veldhuizen <tveldhui@seurat.uwaterloo.ca>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * Suggestions: blitz-suggest@cybervision.com
19 * Bugs: blitz-bugs@cybervision.com
20 *
21 * For more information, please see the Blitz++ Home Page:
22 * http://seurat.uwaterloo.ca/blitz/
23 *
24 ***************************************************************************
25 * $Log: not supported by cvs2svn $
26 * Revision 1.1.1.1 1999/04/09 17:59:02 ansari
27 * Creation module DPC/Blitz (blitz 0.4) Reza 09/04/99
28 *
29 * Revision 1.2 1998/03/14 00:04:47 tveldhui
30 * 0.2-alpha-05
31 *
32 * Revision 1.1 1997/07/16 14:51:20 tveldhui
33 * Update: Alpha release 0.2 (Arrays)
34 *
35 */
36
37// Fast traversal orders require the ISO/ANSI C++ standard library
38// (particularly set).
39#ifdef BZ_HAVE_STD
40
41#ifndef BZ_TRAVERSAL_H
42#define BZ_TRAVERSAL_H
43
44#ifndef BZ_TINYVEC_H
45 #include <blitz/tinyvec.h>
46#endif
47
48#ifndef BZ_VECTOR_H
49 #include <blitz/vector.h>
50#endif
51
52#include <set>
53
54BZ_NAMESPACE(blitz)
55
56template<int N_dimensions>
57class TraversalOrder {
58
59public:
60 typedef TinyVector<int, N_dimensions> T_coord;
61 typedef Vector<T_coord> T_traversal;
62
63 TraversalOrder()
64 {
65 size_ = 0;
66 }
67
68 TraversalOrder(const T_coord& size, T_traversal& order)
69 : size_(size), order_(order)
70 { }
71
72 TraversalOrder(const T_coord& size)
73 : size_(size)
74 { }
75
76 T_coord operator[](int i) const
77 { return order_[i]; }
78
79 T_coord& operator[](int i)
80 { return order_[i]; }
81
82 int length() const
83 { return order_.length(); }
84
85 bool operator<(const TraversalOrder<N_dimensions>& x) const
86 {
87 for (int i=0; i < N_dimensions; ++i)
88 {
89 if (size_[i] < x.size_[i])
90 return true;
91 else if (size_[i] > x.size_[i])
92 return false;
93 }
94 return false;
95 }
96
97 bool operator==(const TraversalOrder<N_dimensions>& x) const
98 {
99 for (int i=0; i < N_dimensions; ++i)
100 {
101 if (size_[i] != x.size_[i])
102 return false;
103 }
104
105 return true;
106 }
107
108protected:
109 T_traversal order_;
110 T_coord size_;
111};
112
113/*
114 * This specialization is provided to avoid problems with zero-length
115 * vectors.
116 */
117template<>
118class TraversalOrder<0> {
119};
120
121template<int N_dimensions>
122class TraversalOrderCollection {
123public:
124 typedef TraversalOrder<N_dimensions> T_traversal;
125 typedef _bz_typename T_traversal::T_coord T_coord;
126 typedef set<T_traversal> T_set;
127 typedef _bz_typename set<T_traversal>::const_iterator T_iterator;
128
129 const T_traversal* find(const T_coord& size)
130 {
131 T_iterator iter = traversals_.find(T_traversal(size));
132 if (iter != traversals_.end())
133 return &(*iter);
134 return 0;
135 }
136
137 void insert(T_traversal x)
138 {
139 traversals_.insert(x);
140 }
141
142protected:
143 static T_set traversals_;
144};
145
146/*
147 * This specialization is provided to avoid problems with zero-length
148 * vectors.
149 */
150
151template<>
152class TraversalOrderCollection<0> {
153public:
154 typedef int T_traversal;
155 typedef int T_coord;
156 typedef int T_set;
157 typedef int T_iterator;
158
159 const T_traversal* find(const T_coord& size)
160 { return 0; }
161};
162
163BZ_NAMESPACE_END
164
165#include <blitz/traversal.cc>
166
167#endif // BZ_TRAVERSAL_H
168
169#endif // BZ_HAVE_STD
170
Note: See TracBrowser for help on using the repository browser.