source: Sophya/trunk/SophyaLib/NTools/rzvect.h@ 989

Last change on this file since 989 was 244, checked in by ansari, 26 years ago

beaucoup modifs rz+cmv 22/4/99

File size: 2.0 KB
Line 
1// This may look like C code, but it is really -*- C++ -*-
2/* Classe vecteurs de type non constant (template) */
3/* E. Aubourg, E. Lesquoy */
4/* Modifs R. Ansari 04/95 */
5
6#ifndef RZVECT_SEEN
7#define RZVECT_SEEN
8
9#include "machdefs.h"
10#include "pexceptions.h"
11#include "perrors.h"
12
13template <class T>
14class RzVect EXC_AWARE {
15public:
16 RzVect(int n, T* data);
17 RzVect(int n);
18 virtual ~RzVect();
19 inline int& NImgRef() {return nImgRef;}
20 inline int& Shareable() {return shareable;}
21 inline T& operator[](int i);
22 inline const T& operator[](int i) const;
23 int IElem(int k) const;
24 float FElem(int k) const;
25 double DElem(int k) const;
26
27 T* p;
28 int nElt;
29
30private:
31 int nImgRef; // Combien d'images font reference au meme RzVect ?
32 // Le constructeur le met a *** 1 ***
33 // Donc une image doit le changer lorsqu'elle pointe sans allouer.
34 int shareable; // Dit si le RzVect peut etre partage. Mis a 0 par exemple si
35 // le tableau de nombres est en memoire partagee.
36 int ownTable; // Dit si le RzVect peut faire delete du tableau.
37};
38
39template <class T>
40inline T& RzVect<T>::operator[](int i)
41{
42 #ifdef RGCHECK
43 if (i<0 || i>=nElt) THROW(rangeCheckErr);
44 #endif
45 return p[i];
46}
47
48template <class T>
49inline const T& RzVect<T>::operator[](int i) const
50{
51 #ifdef RGCHECK
52 if (i<0 || i>=nElt) THROW(rangeCheckErr);
53 #endif
54 return p[i];
55}
56
57template <class T>
58inline int RzVect<T>::IElem(int k) const
59{
60 return (int) (*this)[k];
61}
62
63template <class T>
64inline float RzVect<T>::FElem(int k) const
65{
66 return (float) (*this)[k];
67}
68
69template <class T>
70inline double RzVect<T>::DElem(int k) const
71{
72 return (double) (*this)[k];
73}
74
75#endif
76
Note: See TracBrowser for help on using the repository browser.