posts - 23,  comments - 94,  trackbacks - 0
前两天某C++群正好在讨论C++中int类型的长度
对于支持C99标准的编译器来说,可以#include <cstdint>
来使用 int32_t, 但是目前不少的编译器都做不到这点
所以,自己写了个IntType.hpp

 1 #ifndef INTTYPE_HPP_
 2 #define INTTYPE_HPP_
 3 
 4 #include "Platform.hpp"
 5 
 6 namespace Charlie
 7 {
 8 
 9 typedef long long int64_t;
10 typedef int       int32_t;
11 typedef short     int16_t;
12 typedef char      int8_t;
13 
14 typedef unsigned long long uint64_t;
15 typedef unsigned int       uint32_t;
16 typedef unsigned short     uint16_t;
17 typedef unsigned char      uint8_t;
18 
19 }
20 
21 #endif // INTTYPE_HPP_
22 

然后今天大部分时间都消耗在了Timer的跨平台处理上

这里采用了Bridge Design Pattern
即pImpl方法,实现了Linux 和 Windows 两个平台相关的高精度计时器
接口设计得很简单,只能得到计时器定义以来经过的时间(单位是毫秒 //虽然精度都高于毫秒)

具体请见一下几个文件了

http://code.google.com/p/charlib/source/browse/trunk/Charlib/includes/Timer.hpp
http://code.google.com/p/charlib/source/browse/trunk/Charlib/includes/TimerImpl.hpp
http://code.google.com/p/charlib/source/browse/trunk/Charlib/includes/LinuxTimerImpl.hpp
http://code.google.com/p/charlib/source/browse/trunk/Charlib/includes/Win32TimerImpl.hpp
以及对应的srcs下的.cpp文件

基本上是这样

Timer {
protected:
    TimerImpl* pImpl;
}

class LinuxTimerImpl : public TimerImpl {}
class Win32TimerImpl : public TimerImpl {}

还定义了一个用于多平台多编译器的平台辨识头文件 - Platform.hpp

目前SVN上也有VC 05的工程 和 Code::Blocks 的工程文件
代码在Windows下 MINGW 和 MSVC 8 两个编译器上编译通过
在Ubuntu下使用Code::Blocks + GCC 编译器上通过

// fibonacci数列的模板元编程版本因为在Ubuntu下GCC编译未通过,所以注释掉了,但是在MSVC 8和Code::Blocks的MINGW下编译通过

SVN地址: http://charlib.googlecode.com/svn/trunk/

其他杂项:
    HugeInt added 预计在有空的时候会完成,用于高精度整形的运算 = =~!

posted on 2009-03-01 21:15 Charlie 侯杰 阅读(1929) 评论(4)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


by Charlie