?? cbuffer.h
字號:
#ifndef CBUFFER_H
#define CBUFFER_H
#include <complex.h>
#define COMPLEX complex
#include "buffer.h" // 包含實數緩沖區說明文件
// 定義復數緩存區的各類
// 復數緩存區抽象類
class cbuffer {
public:
size_t refnum; // 引用數,目的與buffer類一致
cbuffer():refnum(1){};
virtual void alloc(size_t num)=0; // 將緩存區的尺寸重新定位為num個復數
virtual void release()=0; // 釋放緩存區
virtual COMPLEX& retrieve(size_t n)=0; // 獲得第n個復數的引用
virtual cbuffer* clone()=0; // 克隆一個與自己的內容一樣的緩存區
virtual cbuffer* newbuf(size_t n=0)=0; // 產生一個與自己類型一樣的緩存區并返回指針
COMPLEX& operator[](size_t n){ // 重載[]運算符但只能取值不能賦值
return retrieve(n);};
virtual size_t len()=0; // 緩存區長度,以復數個數計
cbuffer* set(size_t n, COMPLEX d); // 設第n個復數的值為d,如果引用數超過1
// 則先克隆出一個新的緩存后再行操作
friend ostream& operator<<(ostream& o, cbuffer& b);
};
ostream& operator<<(ostream& o, cbuffer& b);
cbuffer * getnewcbuffer(size_t n=0); // 根據缺省的復數緩存區類型產生一個新的緩存區
extern cbuffer *defcbuffer; // 指向缺省的復數緩存區變量
class memcbuffer : public cbuffer { // 復數內存緩存區類
public:
COMPLEX * buf; // 指向復數緩存的指針
size_t length; // 緩存區的長度,以復數個數計
memcbuffer():cbuffer(),buf(0),length(0){}; // 缺省構造函數
memcbuffer(size_t lth):cbuffer(),length(lth){ // 構造長度為lth的復數緩存區
if(lth > 0)
buf = new COMPLEX[lth];
else buf = 0; };
~memcbuffer(){delete buf;} // 析構函數,釋放內存
void alloc(size_t num){ // 將緩存區容量重新定為長度為num個復數
delete []buf;
length = num;
buf = new COMPLEX[num]; };
COMPLEX& retrieve(size_t n){ // 獲得第n個復數的引用
return buf[n]; };
void release() { delete []buf; length = 0; }; // 釋放內存
cbuffer* clone(); // 克隆一個內容一樣的新緩存
cbuffer* newbuf(size_t n=0){ // 產生一個類型同自己一樣的具有長度n的新緩存
return new memcbuffer(n);};
size_t len(){return length;}; // 返回緩存的長度
};
class diskcbuffer : public cbuffer { // 復數磁盤緩存區子類
public:
COMPLEX buf; // 當前的復數值
size_t length; // 緩存區長度
size_t n; // 當前復數值的序號
FILE * tempfp; // 臨時文件指針
diskcbuffer():cbuffer(),buf(0.0),length(0),tempfp(0),n(0){}; // 缺省構造函數
diskcbuffer(size_t lth); // 構造長度為lth個復數的緩存
~diskcbuffer(); // 析構函數
void alloc(size_t num); // 將緩存區尺寸重新定為num
COMPLEX& retrieve(size_t n); // 取得第n個復數的引用
void release(); // 關閉臨時文件
cbuffer* clone(); // 克隆一個內容相同的緩存
cbuffer* newbuf(size_t n=0){return new diskcbuffer(n);}; // 產生一個子類相同的
// 長度為n的緩存
size_t len(){return length;}; // 返回緩存長度
};
#endif // CBUFFER_H
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -