ExMSGraph< T > Class Template Reference

#include <ExGdata.h>

Inheritance diagram for ExMSGraph< T >:
Inheritance graph
[legend]
Collaboration diagram for ExMSGraph< T >:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 ExMSGraph (int x, int y=1, int z=1, T v=(T) 0, T b=(T) 0, double rz=1.0, int *rn=NULL)
 ExMSGraph (RBound< int > rb, T v=(T) 0, T b=(T) 0, double rz=1.0, int *rn=NULL)
 ExMSGraph (int *rn=NULL)
virtual ~ExMSGraph (void)
void set (int x, int y=1, int z=1, T v=(T) 0, T b=(T) 0, double rz=1.0, int *rn=NULL)
void set (RBound< int > rb, T v=(T) 0, T b=(T) 0, double rz=1.0, int *rn=NULL)
void mimicry (ExMSGraph< T > s)
bool isNull (void)
 グラフィックデータを持いないか?
void free (void)
 グラフィックデータを開放する(メモリ管理なし兼用)
void mfree (bool azero=false)
 グラフィックデータを開放する
void ffree (void)
 グラフィックデータを強制開放する
void setRefer (int *rn)
ExMSGraph< T > operator= (ExMSGraph< T > &s)
ExMSGraph< T > operator= (MSGraph< T > &s)

Public Attributes

int * refno

Detailed Description

template<typename T = uWord>
class jbxl::ExMSGraph< T >

template <typename t="uWord"> class ExMSGraph : public MSGraph<T>

必ず参照数変数(refnoの実体)を指定すること.無くても動くかも知れないが,保証は無い.

関数の中からディストラクトされるメモリ(のコピー)をリターンする場合は,returnの前に mfree()を実行させること.

Definition at line 80 of file ExGdata.h.


Constructor & Destructor Documentation

ExMSGraph ( int  x,
int  y = 1,
int  z = 1,
v = (T)0,
b = (T)0,
double  rz = 1.0,
int *  rn = NULL 
) [inline]

Definition at line 88 of file ExGdata.h.

00088 { set(x, y, z, v, b, rz, rn);}

ExMSGraph ( RBound< int >  rb,
v = (T)0,
b = (T)0,
double  rz = 1.0,
int *  rn = NULL 
) [inline]

Definition at line 89 of file ExGdata.h.

00089 { set(rb, v, b, rz, rn);}

ExMSGraph ( int *  rn = NULL  )  [inline]

Definition at line 90 of file ExGdata.h.

References MSGraph< T >::init(), and ExMSGraph< T >::setRefer().

00090 { MSGraph<T>::init(); setRefer(rn);}

Here is the call graph for this function:

virtual ~ExMSGraph ( void   )  [inline, virtual]

Definition at line 91 of file ExGdata.h.

00091 {}


Member Function Documentation

void ffree ( void   )  [inline]

template <typename t>=""> void ExMSGraph<T>::ffree()

グラフィックデータを強制的に開放する

Definition at line 232 of file ExGdata.h.

References ExMSGraph< T >::free(), MSGraph< T >::init(), ExMSGraph< T >::isNull(), and ExMSGraph< T >::refno.

00233 {  
00234     if (refno==NULL) {
00235         if (!isNull()) {
00236             ::free(MSGraph<T>::gp);
00237         }
00238     }
00239     else {
00240         if (*refno>=0) {
00241             ::free(MSGraph<T>::gp);
00242             *refno = -1;
00243         }
00244     }
00245     MSGraph<T>::init();     // gp = NULL;
00246     return;
00247 }

Here is the call graph for this function:

void free ( void   )  [inline]

template <typename t>=""> void ExMSGraph<T>::free(void)

グラフィックデータを開放する

メモリ管理をしている場合は,参照数を減らす. メモリ管理をしていない場合は,強制的に開放する.

Reimplemented from MSGraph< T >.

Definition at line 179 of file ExGdata.h.

References MSGraph< T >::init(), ExMSGraph< T >::isNull(), ExMSGraph< T >::mfree(), and ExMSGraph< T >::refno.

Referenced by ExMSGraph< T >::ffree(), and ExMSGraph< T >::mfree().

00180 {  
00181     if (refno==NULL) {
00182         if (!isNull()) {
00183             ::free(MSGraph<T>::gp);
00184             MSGraph<T>::init();         // gp = NULL;
00185         }
00186     }
00187     else {
00188         mfree();
00189     }
00190     return;
00191 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool isNull ( void   )  [inline]

Reimplemented from MSGraph< T >.

Definition at line 154 of file ExGdata.h.

References ExMSGraph< T >::refno, and WIN_DD_NULL.

Referenced by ExMSGraph< T >::ffree(), ExMSGraph< T >::free(), and ExMSGraph< T >::operator=().

00155 {   
00156     if (MSGraph<T>::gp==NULL) return true;
00157 
00158 #ifdef WIN32    
00159     if (MSGraph<T>::gp==(T*)WIN_DD_NULL) return true;
00160 #endif
00161 
00162     if (refno!=NULL) {
00163         if (*refno<0) return true;
00164         else          return false;
00165     }
00166     return false;
00167 }

Here is the caller graph for this function:

void mfree ( bool  azero = false  )  [inline]

template <typename t>=""> void ExMSGraph<T>::mfree(bool azero)

グラフィックデータを開放する

メモリ管理をしている場合は,参照数を減らす. メモリ管理をしていない場合は,何もしない.

Parameters:
azero true: 参照数 0 の状態を許す.

Definition at line 205 of file ExGdata.h.

References DEBUG_MODE, ExMSGraph< T >::free(), MSGraph< T >::init(), PRINT_MESG, and ExMSGraph< T >::refno.

Referenced by ExMSGraph< T >::free(), and ExMSGraph< T >::operator=().

00206 {  
00207     if (refno!=NULL) {
00208         (*refno)--;
00209         if (!azero && *refno==0) {
00210             ::free(MSGraph<T>::gp);
00211             *refno = -1; 
00212             MSGraph<T>::init();             // gp = NULL;
00213         }
00214         else if (*refno==-1) {
00215             DEBUG_MODE PRINT_MESG("ExMSGraph<T>::mfree: [警告] 通常ありえない参照数 0\n");
00216         }
00217         else if (*refno<-1) {
00218             *refno = -1;
00219         }
00220     }
00221 
00222     return;
00223 }

Here is the call graph for this function:

Here is the caller graph for this function:

void mimicry ( ExMSGraph< T >  s  )  [inline]

Reimplemented from MSGraph< T >.

Definition at line 95 of file ExGdata.h.

References MSGraph< T >::base, MSGraph< T >::RZxy, MSGraph< T >::xs, MSGraph< T >::ys, MSGraph< T >::zero, and MSGraph< T >::zs.

00095 { set(s.xs, s.ys, s.zs, s.zero, s.base, s.RZxy, NULL);}

ExMSGraph< T > operator= ( MSGraph< T > &  s  )  [inline]

Definition at line 322 of file ExGdata.h.

References MSGraph< T >::base, MSGraph< T >::color, MSGraph< T >::gp, MSGraph< T >::isNull(), ExMSGraph< T >::isNull(), MSGraph< T >::max, ExMSGraph< T >::mfree(), MSGraph< T >::min, MSGraph< T >::norm, MSGraph< T >::rbound, ExMSGraph< T >::refno, MSGraph< T >::RZxy, MSGraph< T >::state, MSGraph< T >::wNowX, MSGraph< T >::wNowY, MSGraph< T >::wRateX, MSGraph< T >::wRateY, MSGraph< T >::wRateZ, MSGraph< T >::wZeroX, MSGraph< T >::wZeroY, MSGraph< T >::wZeroZ, MSGraph< T >::xs, MSGraph< T >::ys, MSGraph< T >::zero, and MSGraph< T >::zs.

00323 { 
00324     if (!isNull()) mfree();
00325 
00326     MSGraph<T>::xs = s.xs;
00327     MSGraph<T>::ys = s.ys;
00328     MSGraph<T>::zs = s.zs;
00329     MSGraph<T>::gp = s.gp;
00330     MSGraph<T>::zero = s.zero;
00331     MSGraph<T>::base = s.base;
00332 
00333     MSGraph<T>::max  = s.max;
00334     MSGraph<T>::min  = s.min;
00335     MSGraph<T>::color = s.color;
00336     MSGraph<T>::state = s.state;
00337     MSGraph<T>::rbound = s.rbound;
00338     MSGraph<T>::RZxy = s.RZxy;
00339     MSGraph<T>::norm = s.norm;
00340 
00341     MSGraph<T>::wRateX = s.wRateX;
00342     MSGraph<T>::wRateY = s.wRateY;
00343     MSGraph<T>::wRateZ = s.wRateZ;
00344     MSGraph<T>::wZeroX = s.wZeroX;
00345     MSGraph<T>::wZeroY = s.wZeroY;
00346     MSGraph<T>::wZeroZ = s.wZeroZ;
00347     MSGraph<T>::wNowX  = s.wNowX;
00348     MSGraph<T>::wNowY  = s.wNowY;
00349 
00350     if (!s.isNull()) {                          // コピー元はデータを持っている.
00351         if (refno!=NULL) {                          // 自分の参照数変数を持っている.
00352             if (*refno<=-1) *refno =  1;            // 自分の参照数変数が未使用ならそれを使う.
00353             else  refno = NULL;                         // 参照数変数は誰かが使っているので,自分は参照数変数無しになる.
00354         }   
00355     }
00356 
00357     else {                                      // コピー元はデータを持っていない
00358         MSGraph<T>::gp = NULL;
00359         if (refno!=NULL) {                          // 自分の参照数変数を持っている.
00360             if (*refno<=-1) *refno = -1;            // 自分の参照数変数が未使用ならそれを使う.
00361             else refno = NULL;                          // 参照数変数は誰かが使っているので,自分は参照数変数無しになる.
00362         }
00363     }
00364 
00365     return *this;
00366 }

Here is the call graph for this function:

ExMSGraph< T > operator= ( ExMSGraph< T > &  s  )  [inline]

Definition at line 253 of file ExGdata.h.

References MSGraph< T >::base, MSGraph< T >::color, DEBUG_MODE, MSGraph< T >::gp, ExMSGraph< T >::isNull(), MSGraph< T >::max, ExMSGraph< T >::mfree(), MSGraph< T >::min, MSGraph< T >::norm, PRINT_MESG, MSGraph< T >::rbound, ExMSGraph< T >::refno, MSGraph< T >::RZxy, MSGraph< T >::state, MSGraph< T >::wNowX, MSGraph< T >::wNowY, MSGraph< T >::wNowZ, MSGraph< T >::wRateX, MSGraph< T >::wRateY, MSGraph< T >::wRateZ, MSGraph< T >::wZeroX, MSGraph< T >::wZeroY, MSGraph< T >::wZeroZ, MSGraph< T >::xs, MSGraph< T >::ys, MSGraph< T >::zero, and MSGraph< T >::zs.

00254 {
00255     ExMSGraph<T> dm = *this;
00256 
00257     MSGraph<T>::xs = s.xs;
00258     MSGraph<T>::ys = s.ys;
00259     MSGraph<T>::zs = s.zs;
00260     MSGraph<T>::gp = s.gp;
00261     MSGraph<T>::zero = s.zero;
00262     MSGraph<T>::base = s.base;
00263 
00264     MSGraph<T>::max = s.max;
00265     MSGraph<T>::min = s.min;
00266     MSGraph<T>::color = s.color;
00267     MSGraph<T>::state = s.state;
00268     MSGraph<T>::rbound = s.rbound;
00269     MSGraph<T>::RZxy = s.RZxy;
00270     MSGraph<T>::norm = s.norm;
00271 
00272     MSGraph<T>::wRateX = s.wRateX;
00273     MSGraph<T>::wRateY = s.wRateY;
00274     MSGraph<T>::wRateZ = s.wRateZ;
00275     MSGraph<T>::wZeroX = s.wZeroX;
00276     MSGraph<T>::wZeroY = s.wZeroY;
00277     MSGraph<T>::wZeroZ = s.wZeroZ;
00278     MSGraph<T>::wNowX  = s.wNowX;
00279     MSGraph<T>::wNowY  = s.wNowY;
00280     MSGraph<T>::wNowZ  = s.wNowZ;
00281 
00282     if (!s.isNull()) {                          // コピー元はデータを持っている.
00283         if (s.refno!=NULL) {                        // コピー元は参照数変数を持っている.
00284             if (*s.refno>=0) {                      // 相手の参照数変数を使う.
00285                 refno = s.refno;
00286                 (*refno)++;
00287             }
00288             else {
00289                 DEBUG_MODE PRINT_MESG("ExMSGraph<T>::= (ExMSGraph): コピー元参照数変数の不正!!\n");
00290             }
00291         }
00292         else {                                      // コピー元は参照数変数を持っていない.
00293             if (refno!=NULL) {                          // 自分の参照数変数を持っている.
00294                 if (*refno<=-1) *refno = 1;             // 自分の参照数変数が未使用ならそれを使う.
00295                 else  refno = NULL;                         // 参照数変数は誰かが使っているので,自分は参照数変数無しになる.
00296             }   
00297         }
00298     }
00299 
00300     else {                                      // コピー元はデータを持っていない
00301         MSGraph<T>::gp = NULL;
00302         if (s.refno!=NULL) {                        // コピー元は参照数変数を持っている.
00303             refno = s.refno;                            // 相手の参照数変数を使う.
00304             *refno = -1;                                // データは無いので -1 に.
00305         }                                       
00306         else {                                      // コピー元は参照数変数を持っていない.
00307             if (refno!=NULL) {                          // 自分の参照数変数を持っている.
00308                 if (*refno<=-1) *refno = -1;            // 自分の参照数変数が未使用ならそれを使う.
00309                 else refno = NULL;                          // 参照数変数は誰かが使っているので,自分は参照数変数無しになる.
00310             }
00311         }
00312     }
00313 
00314     if (!dm.isNull()) dm.mfree();
00315     return *this;
00316 }

Here is the call graph for this function:

void set ( RBound< int >  rb,
v = (T)0,
b = (T)0,
double  rz = 1.0,
int *  rn = NULL 
) [inline]

Definition at line 110 of file ExGdata.h.

References RBound< T >::xmax, RBound< T >::xmin, RBound< T >::ymax, RBound< T >::ymin, RBound< T >::zmax, and RBound< T >::zmin.

00110                                                                                            {
00111     set(rb.xmax-rb.xmin+1, rb.ymax-rb.ymin+1, rb.zmax-rb.zmin+1, v, b, rz, rn);
00112     MSGraph<T>::rbound = rb;
00113     return;
00114 }

void set ( int  x,
int  y = 1,
int  z = 1,
v = (T)0,
b = (T)0,
double  rz = 1.0,
int *  rn = NULL 
) [inline]

Definition at line 119 of file ExGdata.h.

References MSGraph< T >::getm(), ExMSGraph< T >::refno, and ExMSGraph< T >::setRefer().

00120 { 
00121     if (z<=0) z = 1;
00122 
00123     MSGraph<T>::getm(x, y, z, v); 
00124     if (MSGraph<T>::gp==NULL) return;
00125 
00126     MSGraph<T>::base = b;
00127     if (rz==0.0) MSGraph<T>::RZxy = 1.0;
00128     else         MSGraph<T>::RZxy = rz;
00129     MSGraph<T>::rbound.set(0, x-1, 0, y-1, 0, z-1);
00130     
00131     if (rn!=NULL) setRefer(rn);
00132     else if (refno!=NULL) {
00133         if (MSGraph<T>::gp==NULL) *refno = -1;
00134         else                      *refno =  1;
00135     }
00136     return;
00137 }

Here is the call graph for this function:

void setRefer ( int *  rn  )  [inline]

Definition at line 142 of file ExGdata.h.

References ExMSGraph< T >::refno.

Referenced by ExMSGraph< T >::ExMSGraph(), and ExMSGraph< T >::set().

00143 {
00144     refno = rn;
00145     if (refno!=NULL) {
00146         if (MSGraph<T>::gp==NULL) *refno = -1;
00147         else                      *refno =  1;
00148     }
00149 }

Here is the caller graph for this function:


Member Data Documentation

int* refno

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

Generated on 15 Nov 2023 for JunkBox_Lib++ (for Windows) by  doxygen 1.6.1