source: Sophya/trunk/SophyaLib/TArray/utilarr.h@ 1327

Last change on this file since 1327 was 1156, checked in by ansari, 25 years ago

Introduction du type sa_size_t (taille des tableaux), operateur - (TArray::operator - et NegateElt()) - Reza 29/8/2000

File size: 3.8 KB
Line 
1// This may look like C code, but it is really -*- C++ -*-
2// Utility classes for template numerical arrays
3// R. Ansari, C.Magneville 03/2000
4
5#ifndef UtilArray_SEEN
6#define UtilArray_SEEN
7
8#include "machdefs.h"
9#include "mutyv.h"
10
11#include <stdlib.h>
12#include <vector>
13
14namespace SOPHYA {
15
16/* Quelques utilitaires pour les tableaux (Array) */
17
18/*! \ingroup TArray
19 \typedef Arr_DoubleFunctionOfX
20 \brief define a function of float which returns a double
21*/
22typedef double (* Arr_DoubleFunctionOfX) (double x);
23/*! \ingroup TArray
24 \typedef Arr_FloatFunctionOfX
25 \brief define a function of float which returns a double
26*/
27typedef float (* Arr_FloatFunctionOfX) (float x);
28
29//////////////////////////////////////////////////////////
30//! Class to generate a random sequence of values
31class Sequence {
32public:
33 virtual ~Sequence();
34 virtual MuTyV & Value(sa_size_t k) const = 0;
35 inline MuTyV & operator () (sa_size_t k) const { return(Value(k)) ; }
36};
37
38class RandomSequence : public Sequence {
39public:
40 //! to define the generator type
41 enum {
42 Gaussian = 0, //!< gaussian generator
43 Flat = 1 //!< Flat generator
44 };
45
46 explicit RandomSequence(int typ = RandomSequence::Gaussian, double m=0., double s=1.);
47 virtual ~RandomSequence();
48 virtual MuTyV & Value(sa_size_t k) const ;
49 double Rand();
50
51protected:
52 int typ_; //!< random generation type
53 double mean_, sig_; //!< generation parameters mean and sigma (if needed)
54 mutable MuTyV retv_;
55};
56
57
58//////////////////////////////////////////////////////////
59//! Class to generate a sequence of values
60class RegularSequence : public Sequence {
61public:
62 explicit RegularSequence (double start=0., double step=1., Arr_DoubleFunctionOfX f=NULL);
63 virtual ~RegularSequence();
64
65 //! return start value of the sequence
66 inline double & Start() { return start_; }
67 //! return step value of the sequence
68 inline double & Step() { return step_; }
69
70 virtual MuTyV & Value(sa_size_t k) const ;
71
72protected:
73 double start_; //!< start value of the sequence
74 double step_; //!< step value of the sequence
75 Arr_DoubleFunctionOfX myf_; //!< pointer to the sequence function
76 mutable MuTyV retv_;
77};
78
79class EnumeratedSequence : public Sequence {
80public:
81 virtual ~EnumeratedSequence();
82 virtual MuTyV & Value(sa_size_t k) const ;
83 EnumeratedSequence & operator , (MuTyV const & v);
84 EnumeratedSequence & operator = (MuTyV const & v);
85private:
86 vector<MuTyV> vecv_;
87 mutable MuTyV retv_;
88};
89
90 //inline EnumeratedSequence operator , (MuTyV const & a, MuTyV const & b)
91 //{ EnumeratedSequence seq; return ((seq,a),b) ; }
92
93//////////////////////////////////////////////////////////
94//! Class to define a range of indexes
95class Range {
96public:
97 explicit Range(sa_size_t start=0, sa_size_t end=0, sa_size_t size=1, sa_size_t step=1);
98 //! Return the start index
99 inline sa_size_t & Start() { return start_; }
100 //! Return the last index
101 inline sa_size_t & End() { return end_; }
102 //! Return the size
103 inline sa_size_t & Size() { return size_; }
104 //! Return the step
105 inline sa_size_t & Step() { return step_; }
106protected:
107 sa_size_t start_; //!< start index
108 sa_size_t end_; //!< end index
109 sa_size_t size_; //!< size
110 sa_size_t step_; //!< step
111};
112
113//////////////////////////////////////////////////////////
114//! Class to define an identity matrix
115class IdentityMatrix {
116public:
117 explicit IdentityMatrix(double diag=1., sa_size_t n=0);
118 //! return the size of the identity matrix
119 inline sa_size_t Size() { return size_; }
120 //! return the value of the diagonal elements
121 inline double Diag() { return diag_; }
122protected:
123 sa_size_t size_; //!< size of the matrix
124 double diag_; //!< value of the diagonal elements
125};
126
127} // Fin du namespace
128
129#endif
Note: See TracBrowser for help on using the repository browser.