#include <ExGdata.h>
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 |
template <typename t="uWord"> class ExMSGraph : public MSGraph<T>
必ず参照数変数(refnoの実体)を指定すること.無くても動くかも知れないが,保証は無い.
関数の中からディストラクトされるメモリ(のコピー)をリターンする場合は,returnの前に mfree()を実行させること.
Definition at line 80 of file ExGdata.h.
ExMSGraph | ( | int | x, | |
int | y = 1 , |
|||
int | z = 1 , |
|||
T | v = (T)0 , |
|||
T | b = (T)0 , |
|||
double | rz = 1.0 , |
|||
int * | rn = NULL | |||
) | [inline] |
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);}
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 }
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 }
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 }
void mfree | ( | bool | azero = false |
) | [inline] |
template <typename t>=""> void ExMSGraph<T>::mfree(bool azero)
グラフィックデータを開放する
メモリ管理をしている場合は,参照数を減らす. メモリ管理をしていない場合は,何もしない.
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 }
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.
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 }
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 }
void set | ( | RBound< int > | rb, | |
T | v = (T)0 , |
|||
T | 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.
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 | |||
) | [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 }
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 }
int* refno |
Definition at line 84 of file ExGdata.h.
Referenced by ExMSGraph< T >::ffree(), ExMSGraph< T >::free(), ExMSGraph< T >::isNull(), ExMSGraph< T >::mfree(), ExMSGraph< T >::operator=(), ExMSGraph< T >::set(), and ExMSGraph< T >::setRefer().