source: Sophya/trunk/SophyaLib/BaseTools/ndatablock.h@ 256

Last change on this file since 256 was 249, checked in by ansari, 26 years ago

modif rz+cmv 22/4/99

File size: 2.8 KB
Line 
1#ifndef NDATABLOCK_H
2#define NDATABLOCK_H
3
4#include "machdefs.h"
5
6// Classe pour permettre de partager des donnees avec
7// un autre systeme de gestion de references (ex avec Blitz)
8class Bridge {
9public:
10 Bridge() { }
11 virtual ~Bridge() { }
12};
13
14// classe de container avec partage de reference
15template <class T>
16class NDataBlock {
17
18public:
19
20 // Creation / destruction
21 NDataBlock(size_t n);
22 NDataBlock(size_t n, T* data, Bridge* br=NULL);
23 NDataBlock();
24 NDataBlock(NDataBlock<T>& a);
25 NDataBlock(NDataBlock<T>& a,bool share);
26 virtual ~NDataBlock();
27
28 // Temporaire?
29 inline bool IsTemp(void) {return mIsTemp;}
30 inline void SetTemp(bool temp) {mIsTemp=temp;}
31
32 // Gestion taille
33 void Clone(NDataBlock<T>& a);
34 void ReSize(size_t n);
35
36 // Informations pointeur/data
37 inline T* Data()
38 {if(mSRef) return mSRef->data; else return NULL;}
39 inline size_t Size() const {return mSz;}
40 inline T& operator()(size_t i) {return *(mSRef->data+i);}
41
42 inline T* Begin() {return mSRef->data;}
43 inline T const* Begin() const {return mSRef->data;}
44 inline T* End() {return mSRef->data+mSz;}
45 inline T const* End() const {return mSRef->data+mSz;}
46
47 // Impression
48 void Print(size_t i1=0,size_t n=0);
49
50 // Surcharge d operateurs
51 NDataBlock<T>& operator = (NDataBlock<T>& a);
52 NDataBlock<T>& operator = (T v);
53
54 NDataBlock<T>& operator += (T b);
55 NDataBlock<T>& operator -= (T b);
56 NDataBlock<T>& operator *= (T b);
57 NDataBlock<T>& operator /= (T b);
58
59 NDataBlock<T>& operator += (NDataBlock<T>& a);
60 NDataBlock<T>& operator -= (NDataBlock<T>& a);
61 NDataBlock<T>& operator *= (NDataBlock<T>& a);
62 NDataBlock<T>& operator /= (NDataBlock<T>& a);
63
64
65protected:
66
67 typedef struct {size_t nref; T* data; Bridge* bridge; } NDREF;
68
69 void Alloc(size_t n,T* data=NULL,Bridge* br=NULL);
70 void Share(NDataBlock<T>& a);
71 void Delete(void);
72
73 size_t mSz;
74 NDREF* mSRef;
75 bool mIsTemp;
76};
77
78
79template<class T> NDataBlock<T> operator + (const NDataBlock<T>& a, T b);
80template<class T> NDataBlock<T> operator + (T b,const NDataBlock<T>& a);
81template<class T> NDataBlock<T> operator - (const NDataBlock<T>& a, T b);
82template<class T> NDataBlock<T> operator - (T b,const NDataBlock<T>& a);
83template<class T> NDataBlock<T> operator * (const NDataBlock<T>& a, T b);
84template<class T> NDataBlock<T> operator * (T b, const NDataBlock<T>& a);
85template<class T> NDataBlock<T> operator / (const NDataBlock<T>& a, T b);
86
87template<class T> NDataBlock<T> operator + (const NDataBlock<T>& a, const NDataBlock<T>& b);
88template<class T> NDataBlock<T> operator - (const NDataBlock<T>& a, const NDataBlock<T>& b);
89template<class T> NDataBlock<T> operator * (const NDataBlock<T>& a, const NDataBlock<T>& b);
90template<class T> NDataBlock<T> operator / (const NDataBlock<T>& a, const NDataBlock<T>& b);
91
92#endif
Note: See TracBrowser for help on using the repository browser.