Ignore:
Timestamp:
Apr 26, 1999, 5:32:23 PM (26 years ago)
Author:
ansari
Message:

fin ndataBlock + AnyDataObj cree rz+cmv 26/4/99

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/BaseTools/ndatablock.h

    r267 r268  
     1// This may look like C code, but it is really -*- C++ -*-
     2// Gestion de block de donnees avec partage de references
     3//                         C.Magneville          04/99
     4// LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
    15#ifndef NDATABLOCK_H
    26#define NDATABLOCK_H
    37
    48#include "machdefs.h"
     9#include "anydataobj.h"
     10#include <iostream.h>
     11
     12namespace PlanckDPC {
    513
    614// Classe pour permettre de partager des donnees avec
     
    1422// classe de container avec partage de reference
    1523template <class T>
    16 class NDataBlock {
     24class NDataBlock : public AnyDataObj {
    1725
    1826public:
     
    2230  NDataBlock(size_t n, T* data, Bridge* br=NULL);
    2331  NDataBlock();
    24   NDataBlock(NDataBlock<T>& a);
    25   NDataBlock(NDataBlock<T>& a,bool share);
     32  NDataBlock(const NDataBlock<T>& a);
     33  NDataBlock(const NDataBlock<T>& a,bool share);
    2634  virtual ~NDataBlock();
    2735
    2836  // Temporaire?
    29   inline bool IsTemp(void) {return mIsTemp;}
    30   void SetTemp(bool temp=false);
     37  inline bool IsTemp(void) const {return mIsTemp;}
     38  void SetTemp(bool temp=false) const;
    3139
    3240  // Gestion taille/Remplissage
    33   void Clone(NDataBlock<T>& a);
     41  void Clone(const NDataBlock<T>& a);
    3442  void Reset(T v=0);
    3543  void ReSize(size_t n);
     
    3947  inline T* Data()
    4048         {if(mSRef) return mSRef->data; else return NULL;}
     49  inline T* Data() const
     50         {if(mSRef) return mSRef->data; else return NULL;}
    4151  inline size_t Size() const    {return mSz;}
    42   inline T& operator()(size_t i) {return *(mSRef->data+i);}
     52  inline T& operator()(size_t i)       {return *(mSRef->data+i);}
     53  inline T  operator()(size_t i) const {return *(mSRef->data+i);}
    4354
    4455  inline T*        Begin()        {return mSRef->data;}
    45   inline T const*  Begin() const  {return mSRef->data;}
     56  inline T const*  Begin() const  {return mSRef->data;} 
    4657  inline T*        End()          {return mSRef->data+mSz;}
    4758  inline T const*  End() const    {return mSRef->data+mSz;}
    4859
    4960  // Impression
    50   void Print(size_t i1=0,size_t n=0);
     61  void Print(ostream& os, size_t i1=0,size_t n=10) const;
     62  inline void Print(size_t i1=0,size_t n=0) const {Print(cout,i1,n);}
     63
     64  //
     65  T Sum(size_t i1=0,size_t n=0) const;
     66  T Product(size_t i1=0,size_t n=0) const;
    5167
    5268  // Surcharge d operateurs
    53   NDataBlock<T>& operator = (NDataBlock<T>& a);
     69  NDataBlock<T>& operator = (const NDataBlock<T>& a);
    5470  NDataBlock<T>& operator = (T v);
    5571
     
    5975  NDataBlock<T>& operator /= (T b);
    6076
    61   NDataBlock<T>& operator += (NDataBlock<T>& a);
    62   NDataBlock<T>& operator -= (NDataBlock<T>& a);
    63   NDataBlock<T>& operator *= (NDataBlock<T>& a);
    64   NDataBlock<T>& operator /= (NDataBlock<T>& a);
     77  NDataBlock<T>& operator += (const NDataBlock<T>& a);
     78  NDataBlock<T>& operator -= (const NDataBlock<T>& a);
     79  NDataBlock<T>& operator *= (const NDataBlock<T>& a);
     80  NDataBlock<T>& operator /= (const NDataBlock<T>& a);
    6581
    66   NDataBlock<T> Add(T b);
    67   NDataBlock<T> Sub(T b);
    68   NDataBlock<T> SubInv(T b);
    69   NDataBlock<T> Mul(T b);
    70   NDataBlock<T> Div(T b);
    71   NDataBlock<T> DivInv(T b);
     82  NDataBlock<T> Add(T b) const;
     83  NDataBlock<T> Sub(T b) const;
     84  NDataBlock<T> SubInv(T b) const;
     85  NDataBlock<T> Mul(T b) const;
     86  NDataBlock<T> Div(T b) const;
     87  NDataBlock<T> DivInv(T b) const;
    7288
    73   NDataBlock<T> Add(NDataBlock<T>& b);
    74   NDataBlock<T> Sub(NDataBlock<T>& b);
    75   NDataBlock<T> SubInv(NDataBlock<T>& b);
    76   NDataBlock<T> Mul(NDataBlock<T>& b);
    77   NDataBlock<T> Div(NDataBlock<T>& b);
    78   NDataBlock<T> DivInv(NDataBlock<T>& b);
     89  NDataBlock<T> Add(const NDataBlock<T>& b) const;
     90  NDataBlock<T> Sub(const NDataBlock<T>& b) const;
     91  NDataBlock<T> SubInv(const NDataBlock<T>& b) const;
     92  NDataBlock<T> Mul(const NDataBlock<T>& b) const;
     93  NDataBlock<T> Div(const NDataBlock<T>& b) const;
     94  NDataBlock<T> DivInv(const NDataBlock<T>& b) const;
    7995
    8096protected:
     
    8399
    84100  void Alloc(size_t n,T* data=NULL,Bridge* br=NULL);
    85   void Share(NDataBlock<T>& a);
     101  void Share(const NDataBlock<T>& a);
    86102  void Delete(void);
    87103
    88104  size_t   mSz;
    89105  NDREF*   mSRef;
    90   bool     mIsTemp;
     106  mutable bool     mIsTemp;
    91107};
    92108
    93109
    94110template<class T>
    95 inline NDataBlock<T> operator + (NDataBlock<T>& a,T b)
     111inline ostream& operator << (ostream& os, const NDataBlock<T>& a)
     112                      {Print(os); return(os);}
     113template<class T>
     114inline NDataBlock<T> operator + (const NDataBlock<T>& a,T b)
    96115                      {return a.Add(b);}
    97116template<class T>
    98 inline NDataBlock<T> operator + (T b,NDataBlock<T>& a)
     117inline NDataBlock<T> operator + (T b,const NDataBlock<T>& a)
    99118                      {return a.Add(b);}
    100119template<class T>
    101 inline NDataBlock<T> operator - (NDataBlock<T>& a,T b)
     120inline NDataBlock<T> operator - (const NDataBlock<T>& a,T b)
    102121                      {return a.Sub(b);}
    103122template<class T>
    104 inline NDataBlock<T> operator - (T b,NDataBlock<T>& a)
     123inline NDataBlock<T> operator - (T b,const NDataBlock<T>& a)
    105124                      {return a.SubInv(b);}
    106125template<class T>
    107 inline NDataBlock<T> operator * (NDataBlock<T>& a,T b)
     126inline NDataBlock<T> operator * (const NDataBlock<T>& a,T b)
    108127                      {return a.Mul(b);}
    109128template<class T>
    110 inline NDataBlock<T> operator * (T b,NDataBlock<T>& a)
     129inline NDataBlock<T> operator * (T b,const NDataBlock<T>& a)
    111130                      {return a.Mul(b);}
    112131template<class T>
    113 inline NDataBlock<T> operator / (NDataBlock<T>& a,T b)
     132inline NDataBlock<T> operator / (const NDataBlock<T>& a,T b)
    114133                      {return a.Div(b);}
    115134template<class T>
    116 inline NDataBlock<T> operator / (T b,NDataBlock<T>& a)
     135inline NDataBlock<T> operator / (T b,const NDataBlock<T>& a)
    117136                      {return a.DivInv(b);}
    118137
    119138template<class T>
    120 inline NDataBlock<T> operator + (NDataBlock<T>& a,NDataBlock<T>& b)
     139inline NDataBlock<T> operator + (const NDataBlock<T>& a,const NDataBlock<T>& b)
    121140                      {return a.Add(b);}
    122141template<class T>
    123 inline NDataBlock<T> operator - (NDataBlock<T>& a,NDataBlock<T>& b)
     142inline NDataBlock<T> operator - (const NDataBlock<T>& a,const NDataBlock<T>& b)
    124143                      {return a.Sub(b);}
    125144template<class T>
    126 inline NDataBlock<T> operator * (NDataBlock<T>& a,NDataBlock<T>& b)
     145inline NDataBlock<T> operator * (const NDataBlock<T>& a,const NDataBlock<T>& b)
    127146                      {return a.Mul(b);}
    128147template<class T>
    129 inline NDataBlock<T> operator / (NDataBlock<T>& a,NDataBlock<T>& b)
     148inline NDataBlock<T> operator / (const NDataBlock<T>& a,const NDataBlock<T>& b)
    130149                      {return a.Div(b);}
    131150
     151} // Fin du namespace
    132152
    133153#endif
Note: See TracChangeset for help on using the changeset viewer.