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

Last change on this file since 1116 was 1103, checked in by ansari, 25 years ago

Suite operations entre matrices de <> MemOrg, Amelioration des Sequences - Reza 27/7/2000

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