科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件仿基因编程的C++源码

仿基因编程的C++源码

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

放一个仿基因的源码上来大家一起研究一下。

作者:guanwl 来源:CSDN 2008年2月6日

关键字: 源码 C++ 仿基因 Linux

  • 评论
  • 分享微博
  • 分享邮件

#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 int major;
   unsigned int minor;
   gstring  companyName;
   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 int id;
   gstring  info;
   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__ 

 

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章