CBA

仿基因编程的C++源码_0

2019-12-03 00:53:05来源:励志吧0次阅读

#ifndef __GWL_H__

#define __GWL_H__

//GWL名字空间的开始

#define GWL_BEGIN namespace gwl{

//GWL名字空间的结束

#define GWL_END }

//使用名字空间GWL

#define _GWL using namespace gwl;

#include <tchar.h>

#include <windows.h>

#include <string>

#include <vector>

#include <iostream>

GWL_BEGIN

using namespace std;

typedef basic_string<TCHAR, char_traits<TCHAR>,

allocator<TCHAR> > gstring;

#ifdef _UNICODE

#define gout wcout

#else

#define gout cout

#endif

//构建基本错误描述

enum {OK,NOTIMPL,MATCHERR,TYPEERR,INPUTERR,OUTPUTERR,BINDERR,DEBINDERR,NULLBIND,UNKNOW};

typedef vector<const gstring> gerrortype;

class gwlErrorInfo

{

private:

static const gerrortype& error()

{

static gerrortype errors(UNKNOW+1);

errors[OK] = _T("没有错误");

errors[UNKNOW] =_T("不确定原因的错误");

errors[NOTIMPL] =_T("这个处理没有被真正实现");

errors[MATCHERR] =_T("处理匹配器不能构建");

errors[TYPEERR] = _T("不能处理的数据类型");

errors[INPUTERR] = _T("不能输入这个类型数据");

errors[OUTPUTERR] = _T("不能输出这个类型数据");

errors[BINDERR] = _T("数据不支持绑定操作");

errors[DEBINDERR] = _T("数据不支持解除绑定操作");

errors[NULLBIND] = _T("绑定操作不能针对空指针");

return errors;

}

public:

static const gerrortype& gwlErrors(){return error();}

};

#define errs gwlErrorInfo::gwlErrors()

//////////////////////////////////////////////////////////////

//为子类型识别定义一个宏.它把对象本身当做一个异常抛出

#define WHO virtual void Who(){throw this;}

//类Element,是编程元素的抽象,被抽象得只有一个特性:被认出身分

class Element

{

public:

virtual ~Element(){}

virtual void Who() =0;

Element(){}

protected:

explicit Element(const Element&){}

Element& operator = (const Element&){return *this;}

};

//////////////////////////////////////////////////////////////

//类Company,用来把一些有关联的处理机组织到一起

//它相当于现实中的公司或机构

class Company:public Element

{

public:

static const gstring& Name()

{

static gstring name = _T("company");

return name;

}

WHO

};

//////////////////////////////////////////////////////////////

//所有数据的基类型,但它没有任何数据内容.

//它是对数据的高度抽象, 抽象到只有它是能被处理这一点特性了.

class Data:public Element{ };

//////////////////////////////////////////////////////////////

//版本信息

class VersionInfo:public Data

{

public:

VersionInfo(unsigned int _major =1, unsigned int _minor =0,gstring _name = Company::Name() ):

major(_major)

,minor(_minor)

,companyName(_name){}

bool operator == (const VersionInfo& right)

{

return major == right.major

&& minor == right.minor

&& companyName == right.companyName;

}

unsigned intmajor;

unsigned intminor;

gstringcompanyName;

WHO

};

//////////////////////////////////////////////////////////////

//错误信息的携带类型.规定ID为零表示没有错误.

class ErrorInfo:public Data

{

public:

ErrorInfo(unsigned int _id, gstring _info):id(_id),info(_info){}

ErrorInfo(unsigned int _id = OK){

id = _id%(UNKNOW+1);

info = errs[id];

}

ErrorInfo& operator =( ErrorInfo& right){

id = right.id;

info= right.info;

return *this;

}

unsigned intid;

gstringinfo;

WHO

private:

};

//////////////////////////////////////////////////////////////

//对数据进行分类的模板.

template <class PROCESSOR = Processor, class company = Company>

class LocalData:public Data

{

public:

typedef LocalData<PROCESSOR, company> localType;

};

//////////////////////////////////////////////////////////////

//对错误类型分类的模板.

template <class PROCESSOR = Processor, class DATA = Data, class company = Company>

class LocalError:public ErrorInfo{

public:

typedef LocalError<PROCESSOR, DATA, company> localType;

LocalError(unsigned int _id, gstring _info):ErrorInfo(_id, _info){}

LocalError(unsigned int _id):ErrorInfo(_id){}

WHO

};

//////////////////////////////////////////////////////////////

//数据群落

//通过数据群落中处理, 用户可以方便的实现自己想要的相关数据处理.

template <class PROCESSOR, class company = Company>

class DataCommunity:public Data

{

public:

virtual void Set(PROCESSOR& match){}

virtual void Get(PROCESSOR& match){}

};

//////////////////////////////////////////////////////////////

//处理机的基类型, processor

//它是系统中"数据处理块"的高度抽象. 抽象到只能处理数据了.

class Processor:public Element

{

public:

Processor(){}

virtual void Set(Data& data){throw ErrorInfo(INPUTERR);} //数据流入

virtual void Get(Data& data){throw ErrorInfo(OUTPUTERR);} //数据流出

virtual void Bind(Data* data){throw ErrorInfo(BINDERR);}

virtual void Debind(Data* data) {throw ErrorInfo(DEBINDERR);}

virtual const ErrorInfo& LastError(){

static ErrorInfo err(NOTIMPL);

return err;

};

protected:

//防止因赋值操作和拷贝构造所带来的混乱

Processor& operator =(Processor&){return *this;}

explicit Processor(Processor& o){}//这是也防止混乱的.

};

//////////////////////////////////////////////////////////////

//宏CENOZOIC,用来新生一个处理机

#define CENOZOIC(NEW_PROCESSOR_NAME)\

class NEW_PROCESSOR_NAME:public Processor\

{\

public:\

WHO\

};

////////////////////////////////

//定义一个从windows动态链接库进行处理机真正实现的建立方针

/////

template<class PROCESSOR>

class Windll

{

public:

typedef PROCESSOR* (*CREATE)(PROCESSOR&);

Windll():LibHandle(0){}

~Windll(){if (LibHandle) FreeLibrary(LibHandle);}

PROCESSOR* Create(TCHAR* path)

{

CREATE exCreate;

if(!path) return 0;

LibHandle = LoadLibrary(path);

if(!LibHandle)

return 0;

exCreate = (CREATE)GetProcAddress(LibHandle, "Create");

if(!exCreate)

return 0;

return exCreate(PROCESSOR());

}

private:

HMODULE LibHandle;//处理机工厂所在的库的句柄

};

//////////////////////////////////////////////////////////////

//处理机匹配器.它有以下功能

//功能1:对处理机名柄进行智能包装

//功能2:对处理所能处理的数据进行匹配

template <class PROCESSOR, class COMPANY = Company, template <typename>class ENVIONMENT = Windll>

class Match

{

public:

typedef Match<PROCESSOR, COMPANY> MatchType;//, ENVIONMENT> MatchType;//自己的类型

typedef LocalData<PROCESSOR, COMPANY> datatype;//所能处理的数据类型

typedef DataCommunity<PROCESSOR, COMPANY> datacomm;//所能处理的数据群类型

Match(TCHAR* loc)

{

handle = envionment.Create(loc);

}

~Match()

{

if(handle)

{

delete handle;

handle = 0;

}

}

operator bool(){

return handle?true:false;

}

//单项数据输入

MatchType& operator >> (datatype& data)

{

if(!handle) throw ErrorInfo(MATCHERR);

handle->Get(data);

return *this;

}

//单项数据输出

MatchType& operator << (datatype& data)

{

if(!handle) throw ErrorInfo(MATCHERR);

handle->Set(data);

return *this;

}

//数据群落输出

MatchType& operator<< (datacomm& dataSet)

{

if(!handle) throw ErrorInfo(MATCHERR);

dataSet.Set(*handle);

return *this;

}

// 数据群落输入

MatchType& operator >>(datacomm& dataSet)

{

if(!handle) throw ErrorInfo(MATCHERR);

dataSet.Get(*handle);

return *this;

}

const ErrorInfo& LastError()

{

if(!handle) throw ErrorInfo(MATCHERR);

return handle->LastError();

}

private:

PROCESSOR *handle;

ENVIONMENT<PROCESSOR> envionment;

};

GWL_END

#endif //__GWL_H__

查看本文来源

常山县人民医院怎么样
重庆医科大学附属永川医院
石家庄最好的癫痫病专科医院
昆明治妇科病大概要多少钱
营口治疗癫痫病医院哪家好
分享到: