MOOSE - Multiscale Object Oriented Simulation Environment
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Dinfo< D > Class Template Reference

#include <Dinfo.h>

+ Inheritance diagram for Dinfo< D >:
+ Collaboration diagram for Dinfo< D >:

Public Member Functions

char * allocData (unsigned int numData) const
 
void assignData (char *data, unsigned int copyEntries, const char *orig, unsigned int origEntries) const
 
char * copyData (const char *orig, unsigned int origEntries, unsigned int copyEntries, unsigned int startEntry) const
 
void destroyData (char *d) const
 
 Dinfo ()
 
 Dinfo (bool isOneZombie)
 
bool isA (const DinfoBase *other) const
 
unsigned int size () const
 
unsigned int sizeIncrement () const
 
- Public Member Functions inherited from DinfoBase
 DinfoBase ()
 
 DinfoBase (bool isOneZombie)
 
bool isOneZombie () const
 
virtual ~DinfoBase ()
 

Private Attributes

unsigned int sizeIncrement_
 

Detailed Description

template<class D>
class Dinfo< D >

Definition at line 60 of file Dinfo.h.

Constructor & Destructor Documentation

template<class D>
Dinfo< D >::Dinfo ( )
inline

Definition at line 63 of file Dinfo.h.

64  : sizeIncrement_( sizeof( D ) )
65  {;}
unsigned int sizeIncrement_
Definition: Dinfo.h:174
template<class D>
Dinfo< D >::Dinfo ( bool  isOneZombie)
inline

Definition at line 66 of file Dinfo.h.

68  sizeIncrement_( isOneZombie ? 0 : sizeof( D ) )
69  {;}
unsigned int sizeIncrement_
Definition: Dinfo.h:174
bool isOneZombie() const
Definition: Dinfo.h:53
DinfoBase()
Definition: Dinfo.h:15

Member Function Documentation

template<class D>
char* Dinfo< D >::allocData ( unsigned int  numData) const
inlinevirtual

Implements DinfoBase.

Definition at line 71 of file Dinfo.h.

71  {
72  if ( numData == 0 )
73  return 0;
74  else
75  return reinterpret_cast< char* >( new( nothrow) D[ numData ] );
76  }
template<class D>
void Dinfo< D >::assignData ( char *  copy,
unsigned int  copyEntries,
const char *  orig,
unsigned int  origEntries 
) const
inlinevirtual

Assigns data contents from 'orig' over to 'copy'. Tiles the origEntries onto the copyEntries. So if there are fewer origEntries, the orig data contents are repeated till the copy is full.

Implements DinfoBase.

Definition at line 106 of file Dinfo.h.

References DinfoBase::isOneZombie().

108  {
109  if ( origEntries == 0 || copyEntries == 0 ||
110  orig == 0 || data == 0 ) {
111  return;
112  }
113  if ( isOneZombie() )
114  copyEntries = 1;
115  const D* origData = reinterpret_cast< const D* >( orig );
116  D* tgt = reinterpret_cast< D* >( data );
117  for ( unsigned int i = 0; i < copyEntries; ++i ) {
118  tgt[ i ] = origData[ i % origEntries ];
119  }
120 
121  /*
122  for ( unsigned int i = 0; i < copyEntries; i+= origEntries ) {
123  unsigned int numCopies = origEntries;
124  if ( copyEntries - i < origEntries )
125  numCopies = copyEntries - i;
126  for ( unsigned int j = 0; j < numCopies; ++j ) {
127  tgt[i +j] = origData[j];
128  }
129  // memcpy( data + i * sizeof( D ), orig, sizeof( D ) * numCopies );
130  // Memcpy is fast but it does not permit for C++ to do
131  // various constructor and assignment operations that are
132  // important if D has pointers in it.
133  }
134  */
135  }
bool isOneZombie() const
Definition: Dinfo.h:53

+ Here is the call graph for this function:

template<class D>
char* Dinfo< D >::copyData ( const char *  orig,
unsigned int  origEntries,
unsigned int  copyEntries,
unsigned int  startEntry 
) const
inlinevirtual

Return a newly allocated copy of the original data, repeated copyEntries times. Orig data untouched. Analogous to copying a vector into a bigger one. Repeat the original data as many times as possible.

Implements DinfoBase.

Definition at line 78 of file Dinfo.h.

References DinfoBase::isOneZombie().

80  {
81  if ( origEntries == 0 )
82  return 0;
83  if ( isOneZombie() )
84  copyEntries = 1;
85 
86  D* ret = new( nothrow ) D[copyEntries];
87  if ( !ret )
88  return 0;
89  const D* origData = reinterpret_cast< const D* >( orig );
90  for ( unsigned int i = 0; i < copyEntries; ++i ) {
91  ret[ i ] = origData[ ( i + startEntry ) % origEntries ];
92  }
93 
94  /*
95  D* ret = new D[ numData * numCopies ];
96  const D* origData = reinterpret_cast< const D* >( orig );
97  for ( unsigned int i = 0; i < numData; ++i ) {
98  for ( unsigned int j = 0; j < numCopies; ++j ) {
99  ret[ i * numCopies + j ] = origData[ i ];
100  }
101  }
102  */
103  return reinterpret_cast< char* >( ret );
104  }
bool isOneZombie() const
Definition: Dinfo.h:53

+ Here is the call graph for this function:

template<class D>
void Dinfo< D >::destroyData ( char *  d) const
inlinevirtual

Implements DinfoBase.

Definition at line 137 of file Dinfo.h.

137  {
138  delete[] reinterpret_cast< D* >( d );
139  }
template<class D>
bool Dinfo< D >::isA ( const DinfoBase other) const
inlinevirtual

Implements DinfoBase.

Definition at line 170 of file Dinfo.h.

170  {
171  return dynamic_cast< const Dinfo< D >* >( other );
172  }
Definition: Dinfo.h:60
template<class D>
unsigned int Dinfo< D >::size ( ) const
inlinevirtual

Implements DinfoBase.

Reimplemented in ZeroSizeDinfo< D >.

Definition at line 141 of file Dinfo.h.

141  {
142  return sizeof( D );
143  }
template<class D>
unsigned int Dinfo< D >::sizeIncrement ( ) const
inlinevirtual

This little hack is used for lookups of a data entry in an array. Normally sizeIncrement is identical to size. However, if it is a OneZombie then we always need to return the original pointer, so here sizeIncrement becomes zero.

Implements DinfoBase.

Reimplemented in ZeroSizeDinfo< D >.

Definition at line 151 of file Dinfo.h.

References Dinfo< D >::sizeIncrement_.

151  {
152  return sizeIncrement_;
153  }
unsigned int sizeIncrement_
Definition: Dinfo.h:174

Member Data Documentation

template<class D>
unsigned int Dinfo< D >::sizeIncrement_
private

Definition at line 174 of file Dinfo.h.

Referenced by Dinfo< D >::sizeIncrement().


The documentation for this class was generated from the following file: