
C/C++
文章平均质量分 54
Kevin_qing
这个作者很懒,什么都没留下…
展开
-
16位BIT模式下的ALPHA运算
各位好,16BIT ALPHA运算终于整理出来了,如有不对之处,欢迎大家批评指教。怎么样?还算谦虚吧?好了,言归正传,特效显示中ALPHA融合是应用最多的一种,在D3D中可用到硬件加速,ALPHA融合要比2D下简捷许多。鄙人一直搜索2D下的各种特效运算,现将所见过当中较好的ALPHA运算拿出来,同大家一起分享,如果各位大侠有更好的算法,千万别忘了告诉我。附:源码,编译需DX6或以上SDK,VC,D原创 2000-08-10 14:57:00 · 2345 阅读 · 0 评论 -
C++实现网络服务器命令模式(设计及模板实现)
Client->request Server->response模式的网络服务器中,对应答的处理一般是采用switch模式。此方法比较难于维护,且缺少错误检测。本文采用C++模板实现一套较为通用的服务器命令处理模型。阅读本文你应该对C++模板较为熟悉。ok,进入正题。假定客户命令包头为。struct MsgHead{DWORD type;};定义客户端命令模板类。templateclass Req原创 2005-07-10 14:53:00 · 2887 阅读 · 0 评论 -
C++多参数模板偏特化
多参数模板必须对所有参数才能偏特化,本文给出一种解决特化单个参数的方案例:使用loki中的多线程模板SingleThreaded单线程无需锁ObjectLevelLockable多线程锁单一实例ClassLevelLockable多线程锁类现我希望使用编译时定义的const#ifdef _MTconst int MT=1;#elseconst int MT=0;#endif来让我的类在单线程和多线原创 2005-12-22 11:16:00 · 3529 阅读 · 0 评论 -
mysql C API statment and bind 执行查询
#include #include #include typedef std::string string;struct mysql_parm{ string host; string user; string password; string database; string unixsock;};class DBSTMT;class DBMysql;class DBSTMT{ DB原创 2006-03-21 13:45:00 · 2222 阅读 · 0 评论 -
整理的一些东西
1.#pragma message#define $str( L )#L#define $mkstr( M, L )M(L)#define $Line $mkstr( $str, __LINE__ )#define message(x) message( __FILE__ "(" $Line ") : " x)2.跟踪一个函数的调用地方typedef int (*FP_printf原创 2006-02-24 11:53:00 · 1271 阅读 · 0 评论 -
C++模板来实现一个通用的内存池.
从最简单的入手1.实现一个固定大小的allocator//分配固定大小内存块的模板类,内部缓存算法自己实现了,//我用的是预分配+回收cache链//即分配时先检查回收链有无数据,无的话每次分配n*size个块,然后返回其中一个,直到该块用完后继续分配//释放时直接加入回收链即可//好处是速度够块,但是浪费空间可能就比较大了template class Fix_All原创 2006-02-25 00:11:00 · 3424 阅读 · 3 评论 -
c++类的编译器实现方式描述
貌似有些同学还不太明白这个,我试着用c代码描述c++类相关的一些实现方式。 设类abc,bc继承于a,都有个虚函数f(),析构函数为虚c++代码//---------A struct a{ a(){ } void f(){printf("cla原创 2011-08-24 15:04:21 · 1512 阅读 · 0 评论 -
即时战略游戏中寻径
即时战略游戏中寻径(Path-finding)算法的原理及实现技术作者:沈璐 前几年,我在学校上学时,经常与同学在宿舍里网络对战“红色警报”,玩多了也一直在探索象“红色警报”这类即时战略游戏背后隐藏的编程奥秘。最近,找到一段空闲时间,终于把以前的想法付诸实施,用VC写了一个即时战略游戏的雏形(执行程序在附件中,采用了本文介绍的算法)。在此把即时战略游戏中寻径(Path-fin转载 2000-08-22 08:54:00 · 2954 阅读 · 1 评论 -
通用C++内存池代码
原理在这里http://blog.csdn.net/kevin_qing/article/details/608891以前代码找不到了,重写一次。 加上了一些简单的错误检测代码。帮助调试内存问题。 初步代码,还未仔细检查,有bug请留言。 //type and macro#include //debug 信息const bool DebugQMem=1;原创 2012-03-10 21:33:16 · 1761 阅读 · 2 评论 -
从深度缓冲里重建位置信息
参考资料http://blog.csdn.net/shadow_gz/article/details/6394827http://www.klayge.org/wiki/index.php?title=%E5%BB%B6%E8%BF%9F%E6%B8%B2%E6%9F%93 从project space转换到view space下 需要的东西,1 . linear z=原创 2012-08-17 20:24:54 · 1525 阅读 · 1 评论 -
构造使用类C语言的脚本引擎(3)词法分析
构造使用类C语言的脚本引擎(3)作者 :kevin_qing转贴请注明现在回到编译器上的构造上。编译分为4个步骤1.预处理在这里我只是替换掉源文件的字符/r->/n/0->0x20 (空格)并且在源文件最后加上/02.词法分析.词法分析主要是将输入流分割为一个个的单词,在这里我并未使用flex而是自己实现。(看到正则表达式就晕,更别说叫我写了,而且注视的正则也不好写,还不如自己做比原创 2005-06-24 11:47:00 · 2528 阅读 · 0 评论 -
构造使用类C语言的脚本引擎(2)实现虚拟机和虚拟机调试
构造使用类C语言的脚本引擎(2)作者 :kevin_qing转贴请注明考虑到脚本编译器部分可以单独作为一个进程实现,并且编译器需要虚拟机对其结果进行调试,目前先从最底层的虚拟机部分开始开发。1.虚拟机结构.考虑到目前不支持内部函数定义,采用寄存器方式,以后扩充栈也较为方便变量寄存器REG[256] 其中REG[0]为外部call时存放返回值指令寄存器IP;比较寄存器CFlag;代码段,数据段均为虚原创 2005-06-24 11:30:00 · 3309 阅读 · 3 评论 -
delete this,dll导出类及如何写plugins(PART III)
3.实现plugins。有了前两章的基础,这个就比较好办了。先了解一点点基本概念:Q:what is pluginsA:就是通过加载不同的dll实现不同的功能,或者附加的功能,典型的如模拟器的各种插件(显示,input...)。Q:why we use pluginsA:主要为了使程序模块化,并且容易扩充。升级组件时不需要重新发布整个产品。Q:how to do it?A:使用LoadLibrar原创 2001-07-12 09:48:00 · 1367 阅读 · 0 评论 -
游戏中限制帧速的新方法
以前很多资料介绍的方法都是使用GetTickCount/或者是多媒体定时器,来轮训时间,精度确实不错。但是这样会造成cpu时间的极大浪费,一个主要表现就是在nt/2000环境中后台程序反应极慢。如果可以使用像win32 waitobject之类的方法来实现,那么在等待时间消息时,线程挂起,cup资源浪费较少。这样就不会出现后台程序挂起的问题了。幸运的是,win32在98以后的版本都提供了wai原创 2001-09-16 02:21:00 · 3133 阅读 · 1 评论 -
delete this,dll导出类及如何写plugins(PART I)
1.为什么要使用delete this,以及如何使用。(1)考查这样的情况:有两个对象A,B需要访问同一个多态对象C。因为C一般是通过new 操作构造的,一定要自己释放,但是对象A,B都需要使用它,并且B不知道A什么时候使用完成C,A也不知道B什么时候使用完成C(当然可以用函数通信的方法通知了,不过是一个比较丑陋的实现方法),所以不能在A/B中间来delete,一个折中的办法是在程序退出的时候来原创 2001-07-12 09:38:00 · 1604 阅读 · 0 评论 -
D3dFvf顶点格式的C++描述(vc.net版)
以下代码在vc 7.1(vs.net2003)下编译通过。使用模板偏特化实现#ifndef _AI_D3DFVF_H_#define _AI_D3DFVF_H_//D3d9Fvf struct generate templates//Author Kevinqing //#include //-----------posoition-------------namespace _D3DFv原创 2004-06-04 15:02:00 · 1933 阅读 · 0 评论 -
RLE压缩及优化
简单的说RLE压缩就是将一串连续的相同数据转化为特定的格式达到压缩的目的。下面都对byte流压缩。如输入数据LPBTE pByte={1,1,1,1,1,1};压缩的数据为6,1压缩了4个字符。但是在数据流里面不能直接这么替换,而应该使用特殊的控制字符,否则无法解压。比如pByte={6,1,0,1,1,1,1,1,1};这样有两个6,1无法判断是原有的6,1还是{1,1,1,1,1,1}压缩后的原创 2001-02-27 11:07:00 · 2075 阅读 · 0 评论 -
delete this,dll导出类及如何写plugins(PART II)
2.dll导出类的几种方法。其实我就知道两种啦,还请大家补充。先看M$使用的方法。struct exports{__declspec(dllexport)exports();__declspec(dllexport)~exports();};exports::exports(){}exports::~exports(){}优点:完全和本地的类一样使用,可以直接new/delete.缺点:只能使用自原创 2001-07-12 09:44:00 · 1331 阅读 · 0 评论 -
构造使用类C语言的脚本引擎(1)脚本语法定义
构造使用类C语言的脚本引擎(1)作者 :kevin_qing转贴请注明需求:实现npc逻辑,与游戏(服务器)交互。例如与商人NPC对话打开买卖物品窗口等设计:参考传奇2服务器端脚本后(实现的很烂),定义脚本规则如下:1.采用类C语言,因为熟悉C的人很多,而且C语法较严谨,且使用方便2.数据类型只支持int和const string(用于外部函数的参数或返回值).变量只能为int且不需要显示声明.3原创 2005-06-24 10:42:00 · 3192 阅读 · 1 评论 -
构造使用类C语言的脚本引擎(4)语法分析
构造使用类C语言的脚本引擎(4)作者 :kevin_qing转贴请注明同上一章一样,语法分析部分也不准备使用yacc直接生成代码,而是只使用yacc的生成的分析表。BNF:%token ID IF ELSE SWITCH GOTO RETURN NUMBER STRING MAIN%token ADD_OP MUL_OP ASSIGN_OP CMP_OP LOGIC_OP1 LOGIC_OP2 %原创 2005-06-24 12:36:00 · 2507 阅读 · 0 评论 -
构造使用类C语言的脚本引擎(5)语法检查,生成语法树,代码生成。
构造使用类C语言的脚本引擎(5)作者 :kevin_qing转贴请注明语法检查,常量合并和生成语法树是在reduce规约函数中实现语法树节点定义struct GTreeNode{uint32_t type; uint32_t value;};struct GTreeNode1:public GTreeNode{GTreeNode* child1;};struct GTreeNode2:public原创 2005-06-24 13:14:00 · 3658 阅读 · 0 评论 -
c++ 服务器程序bug dump
调试服务器程序时最怕遇到需要运行10天半个月才遇到一次的bug,这种bug很难还原现场,同时还要时刻注意服务器是否挂掉。本文给出一个解决方法可以极大的提高调试效率。使用本文方法可以在断言失败时自动dump,可用于还原bug环境进行调试。另外崩溃时也会自动记录crash dump。断言函数bool xassert(bool r){ if(!r) __a原创 2014-12-02 14:48:54 · 1802 阅读 · 0 评论