摘要:
Source Insight 作为一款优秀的代码浏览和编辑器应用十分广泛,对于一些重复使用的功能,我们可以定义相关的宏来提高开发效率。1:宏的编写Source Insight Help文档中Macro Language Guide一节详细的介绍了宏的编写,结构和C语言相似,通过阅读文档,相信就可以编写出各种功能强大的宏。这里我编写了一个简单的添加函数注释的宏。View Code macro GetCommentsTime(){ var year var month var day var commTime var sysTime sysTime =... 阅读全文
摘要:
新建一个数据库,执行“create table t1(id integer,info text);”命令后对数据库文件结构的简要分析如下:数据库中第一个页是Btree页。第一个页面的前100个字节是一个对数据库文件进行描述的“文件头”,通过对应关系可以获得“包括数据库的版本、格式的版本、页大小、编码等所有创建数据库时设置的永久性参数”。文件头后面紧跟sqlite_master表的页面,也就是数据库的第一个页面,每个页面由四个部分构成1:页头信息0D表示页面的类型,00 00 表示第一个自由块偏移,00 01表示本页的CELL个数,03 C8表示CELL的开始地址(偏移地址),00表示碎片数。2 阅读全文
摘要:
Btree结构中最要包含一个BtShared结构,该结构包含了一个打开的数据库的所有页面相关信息。View Code struct BtShared { Pager *pPager; /* The page cache */ BtCursor *pCursor; /* A list of all open cursors */ MemPage *pPage1; /* First page of the database */ u8 inStmt; /* True if we are in a statement subtransact... 阅读全文
摘要:
通常一个软件系统都包含不同部分互相交互耦合,我们希望设计能够将系统划分为有意义的各个部件,各个部件能够独立的开发、演进、部署。这时整体性的设计已经无法满足这些挑战,这就需要我们对系统进行合理清晰的划分。通常我们为待开发的系统定义多个层次,每一层完成独立的功能。设计原则:1:系统分为多层,每层完成独立的功能,层内部继续细分子模块,每层能够独立演进、部署。分层原则可以基于业务抽象、硬件、变化性等来划分,比如sqlite就是基于业务抽象来进行分层的。实际的框架设计可能同时结合多种维度比如常见的表示层、逻辑层、数据层就结合了业务抽象和变化两个维度。2:各层的功能基于同层和底层的功能之上,如图所示L1的 阅读全文
摘要:
对于32位的机器,INT整形占四个字节,这意味着如果我们要保存一个INT类型数据需要占用4个字节空间,但实际的情况是4个字节的空间中并非所有的空间都保存了有效的数据位,比如整数1,在内存中以0x00000001表示,实际只有最低位表示了实际数据,通过实现一个整形的压缩算法可以有效的减少存储空间的使用。1:在一个字节数据中只保存7bit有效数据,第8位作为一个INT数据是否表示完成的指示位(1表示未完成,0表示已经完成)。2:通过判断字节的最高BIT位是否为0来获取一个INT型数据,这样我们可以通过1-5个字节数据来表示一个INT型。3:数据转换通过去除每个字节的指示位,其它bit数据拼接构成I 阅读全文
摘要:
分层状态机的设计:对于状态较多的状态机,通常的设计会维护一个庞大的二维矩阵,所有状态耦合在一起,这往往导致维护困难,由于可能存在许多公共的特性,也会导致许多状态具有相同的处理函数。针对这些问题我们可以通过设计分层状态机来解决,主要的思想就是根据不同的功能模块设计出多个状态机,各个状态机分布在不同的层次上。上层状态机调用下层状态机时,上层状态机入栈,下层状态机变为当前处理状态机。通常我们使用堆栈来保存当前状态机的上层状态机信息。下图描述一个分层状态机设计实现:如上图所示,假设L1为上层状态机,L1状态机在L1_STATE2中可以通过L1L2_EVENT1事件触发进入L2状态机,L2状态机在L2_ 阅读全文
摘要:
有限状态机(FSM)是表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用。通常FSM包含几个要素:状态的管理、状态的监控、状态的触发、状态触发后引发的动作。本文主要阐述一下状态机的几种设计方法。1:switch case/if else设计方法curEvent = getEvent();curState = getCurState();switch(curState){ case state1: { switch(curEvent ) { TODO... setCurSt... 阅读全文
摘要:
内存池的实现:1:内存池的初始化:对每个子池进行初始化流程,将子池的入口放入内存池中,初始化block状态。void initPools(){ initPool(POOL1,(void*)pool1,POOL1_BLOCK_NUM,POOL1_BLOCK_SIZE); initPool(POOL2,(void*)pool2,POOL2_BLOCK_NUM,POOL2_BLOCK_SIZE); initPool(POOL3,(void*)pool3,POOL3_BLOCK_NUM,POOL1_BLOCK_SIZE); return;}void initPool(unsig... 阅读全文
摘要:
http://www.cnblogs.com/chencheng 阅读全文
摘要:
源码中在开始BTREE事务的时候,首先会调用btreeIntegrity(p)检测状态的正确性,其实现如下:#define btreeIntegrity(p) \ assert( p->inTrans!=TRANS_NONE || p->pBt->nTransaction<p->pBt->nRef ); \ assert( p->pBt->nTransaction<=p->pBt->nRef ); \ assert( p->pBt->inTransaction!=TRANS_NONE || p->pBt-> 阅读全文