更新
真不敢相信,读muduo已经近两年了,期间主要搞搞java,倒是少有精力读C/C++开源代码了。犹记得当年是整天整天的读muduo和redis,如今忘得差不多了。具体实现忘记也便罢了,可实现策略是不该这么快抛之脑后的。也因此,有了更新的想法,重读一遍,对于细节要刨根问底,多问一个为什么。对于策略要高屋建瓴,能准确描述出来。
说来容易,做到不易。近日教一个没有编程经验的人python,就着实困难。我常感慨,现在的程序员更关注于使用,而不深究缘由。多年经验告诉我,当你进一步理解缘由时,使用起来会更好,更高效,也更准确。浩瀚书海,层层关联,深究也并非易事,此中道理非三言两语可道,姑且不论。苟日新,日日新,又日新,总是要好过原地踏步的。如果有什么值得践行的,我想下面这句话送给自己,和有缘看到博客的同志们:
我的第一篇博客写的虽然浅显了些,但尚算生动,也许我当初嫌理论枯燥,有向新人解释概念的拳拳之心。后来的博客,偏向自己当时理解程度上的叠加,自己读之尚觉费劲。 展开思维,看理解是怎样发生的 ,虽知难以把所有知识点变得生动,但不忘拳拳之心总是好过不为。
基础类 Types.h copyable.h
可复制类继承copyable,否则继承boost::noncopyable。
对C++类型转换进行扩展,implicit_cast 隐式类型转换,down_cast指针转换(父类对象->子类对象)。
时间日期类
####Date类
在muduo::detail下实现儒略日算法及转换年月日结构函数
Date类使用儒略日
可以通过年月日或struct tm创建Date对象
####Timestamp类
Timestamp是毫秒级的时间戳
未提供从linux时间转换时间戳的构造函数
提供static函数从time_t转换时间戳
Timestamp.now()内部调用gettimeofday转换时间戳
int gettimeofday(struct timeval *tv,struct timezone *tz);
####TimeZone类
Linux时间转换函数:
struct tm* gmtime(const time_t* timep);
struct tm* localtime(const time_t* timep);
time_t timelocal(struct tm *tm);
time_t timegm(struct tm *tm);
time_t mktime(struct tm* timeptr);
TimeZone数据存储在shared_ptr:
struct TimeZone::Data
{
vector<detail::Transition> transitions;
vector<detail::Localtime> localtimes;
vector<string> names;
string abbreviation;
};
boost::shared_ptr<Data> data_;
TimeZone类同样实现了四种时间转换的API
muduo::detail中实现读取tzfile时区文件,以及查找localtime的函数
time_t与localtime tm转换利用了时区文件和timegm/gmtime函数
time_t与UTC tm转换则利用了Date类
注:不明白为何不直接做linux函数的封装 难道为了减少系统调用?