博文

DLListBase的内部公有结构link(2008-08-12 16:34:00)

摘要:      link是在DLListBase类中定义的公有内部结构,用于实现双向链表节点的前后链接。其有两个成员变量都是link*指针类型,prev_和next_,分别指向该节点的前一个节点和后一个节点另外提供成员函数registered()来判断该link节点是否有前后节点,即是否被注册;及成员函数deregister()完成节点的注销(prev_=0;next_=0;)

该结构是entry类的基础,使得entry具有了双向链接的属性。......

阅读全文(2598) | 评论:0

关于类的私有成员(2008-07-29 16:15:00)

摘要:对于c++来说,其中一个类里声明的所有私有成员(包括成员函数和成员变量)对于该类的所有对象来说都是透明的,即对该类的对象A和对象B来说,A可以直接访问B的成员变量,直接调用B的成员函数,正像HashTable的transfer函数实现时的源代码那样。......

阅读全文(2422) | 评论:2

HashTable类详解(2008-07-29 09:18:00)

摘要:OpenFOAM中哈希表的实现也采用了类模板技术,使得其可以实现多种不同类别哈希表的构造。
其类头声明如下:
                 template <class T, class Key, class Hash> class HashTable {};
其中三个模板参数T为实际存储对象的类型,Key为标示该对象的关键字,Hash类为表中采用的哈希函数对象类。
哈希表的实现采用的是多串链表的形式,在类内部定义了节点的结构:
                  struct hashedEntry {Key key_; hashedEntry* next_; T obj_;};
这里的三个成员变量key_, next_, obj_分别为节点标示关键字,next_为指向该串下一个节点的指针,obj_为实际保存的对象。 这里所谓的“多串链表”可以如下表示:
fst-->hashedEntry1--next_-->hashedEntry2--next_-->hashedEntry3--next_-->null;
snd-->hashedEntry1--next_-->hashedEntry2--next_-->hashedEntry3--next_-->null;
thrd-->hashedEntry1--next_-->null;
……
……
end-->hashedEntry1--next_-->hashedEntry2--……-->null;
每串链表的首地址之间在内存中是连续的,其相对位置通过模板参数Hash定义的哈希函数计算得到。

实现该多串链表,是通过定义hashedEntry** table_;得到的,各串首地址是通过构造函数里的语句......

阅读全文(4539) | 评论:0

虚函数与纯虚函数(2008-07-02 21:24:00)

摘要:虚函数:          在函数的声明前面加上一个“virtual”关键字,便可声明一个虚函数。
从本质上讲,虚函数实现了“一个接口,多种方法”的理念,而这种理念是多态性的基础。

         基类通过在函数声明前加“virtual”定义一个虚函数,其各级派生类将继承这一虚函数,同时也继承了这一函数的虚属性。如果在某一派生类中重新定义了该虚函数的实现,则一个指向该类对象的基类指针或基类引用在调用该对象的该函数时将调用该类中定义的内容;如果在该派生类中没有定义该虚函数的实现,则一个指向该类对象的基类指针或基类引用在调用该对象的该函数时将调用在继承关系中曾定义了该函数的与当前类距离最近的类中定义的方法。 纯虚函数:         纯虚函数时没有在基类定义的虚函数,具体定义形式如下:
                            virtual  type  func-name(parameter-list)=0;
当一个虚函数变为纯虚函数时,任何派生类必须给出该函数的定义,如果派生类未能定义该纯虚函数,则将导致编译错误!

抽象类:至少包含一个纯虚函数的类称为抽象类。抽象类是不完整的类,因而不能创建抽象类的对象,但却可以创建抽象类的指针和引用。 ......

阅读全文(3439) | 评论:0

linux中的make(2008-03-31 16:21:00)

摘要:make 工具如 GNU make、System V make 和 Berkeley make 是用来组织应用程序编译过程的基本工具,但是每个 make 工具之间又有所不同。本文将介绍 makefile 的结构,避免如何在创建 makefile 时出现一些共同的错误,并探索如何修复或解决可移植性问题,还为解决突发的问题提供了一些技巧。 大部分 UNIX® 和 Linux® 程序都是通过运行 make 来编译的。make 工具会读取一个包含指令的文件(这个文件的名字通常都是 makefile 或 Makefile,不过后文中我们统一称之为 “makefile”),并执行各种操作来编译程序。在很多编译过程中,makefile 自己完全是由其他软件生成的;例如,autoconf/automake 程序就用来开发编译程序。其他程序可能会要求我们直接编辑 makefile,当然,新的开发还可能需要我们自己编写 makefile。 “make 工具”这个短语可能有些容易引起误解。经常使用的 make 工具至少有 3 个变种:GNU make、System V make 和 Berkeley make。它们都是从早期 UNIX 的一个核心规范发展而来的,每个变种都增加了一些新特性。这就导致出现了一种复杂的情况:很常用的一些特性,例如在 makefile 中通过引用来包含其他文件,都不能很好地移植!简单编写程序来创建 makefile 就是一种解决方案。由于 GNU make 是免费的,并且可以广泛地发布,因此有些开发人员就简单地为它来编写代码;类似地,有很多起源于 BSD 的项目都要求我们使用 Berkeley make(这也是免费的)。 稍微逊色一点但依然相关的 make 工具是 Jörg Schilling 的 smake 和 make 家族中的第五位(已不再使用) —— 早先的 make,后者定义了与其他 make 工具共享的一些公共特性的子集。尽管 smake 在任何系统上都不是默认的 make 工具,但是它也是一个很好的 make 实现,有些程序(尤其是 Schilling 的程序)都喜欢使用它。 下面先来回顾一下在使用 makefile 时所遇到的最常见的一些问题。 理解 makefile 要调试 make,需要读取 makefi......

阅读全文(5051) | 评论:0

sed详细用法(转)(2008-03-30 15:30:00)

摘要:sed详细用法介绍 1. Sed简介
sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。 2. 定址
可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定 。 3. Sed命令
调用sed命令有两种形式: sed [options] 'command' file(s) sed [options] -f scriptfile file(s)
a\
在当前行后面加入一行文本。 b lable
分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。 c\
用新的文本改变本行的文本。 d
从模板块(Pattern space)位置删除行。 D
删除模板块的第一行。 i\
在当前行上面插入文本。 h
拷贝模板块的内容到内存中的缓冲区。 H
追加模板块的内容到内存中的缓冲区 g
获得内存缓冲区的内容,并替代当前模板块中的文本。 G
获得内存缓冲区的内容,并追加到当前模板块文本的后面。 l
列表不能打印字符的清单。 n
读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。 N
追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。 p
打印模板块的行。 P(大写)
打印模板块的第一行。 q
退出Sed。 r file
从file中读行。 t label
if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 T label
错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分......

阅读全文(3686) | 评论:0

sed的用法(转)(2008-03-30 14:54:00)

摘要: (转自http://www.dbonline.cn/source/oracle/20031224/UNIX_text%20command%20sed.html)

转比写快多啦唉

文本处理命令之sed

作者:forest


测试:

以 Redhat6.0 为测试环境
事实上在solaris下的sed命令要比linux强,但因为没有测试
环境,我这里只给在linux下经过测试的用法。

目录:

★ 命令行参数简介
★ 首先假设我们有这样一个文本文件 sedtest.txt
★ 输出指定范围的行 p
★ 在每一行前面增加一个制表符(^I)
★ 在每一行后面增加--end
★ 显示指定模式匹配行的行号 [/pattern/]=
★ 在匹配行后面增加文本 [/pattern/]a\ 或者 [address]a\
★ 删除匹配行 [/pattern/]d 或者 [address1][,address2]d
★ 替换匹配行 [/pattern/]c\ 或者 [address1][,address2]c\
★ 在匹配行前面插入文本 [/pattern/]i\ 或者 [address]i\
★ 替换匹配串(注意不再是匹配行) [addr1][,addr2]s/old/new/g
★ 限定范围后的模式匹配
★ 指定替换每一行中匹配的第几次出现
★ &代表最后匹配
★ 利用sed修改PATH环境变量
★ 测试并提高sed命令运行效率
★ 指定输出文件 [address1][,address2]w outputfile
★ 指定输入文件 [address]r inputfile
★ 替换相应字符 [address1][,address2]y/old/new/
★ !号的使用
★ \c正则表达式c 的使用
★ sed命令中正则表达式的复杂性
★ 转换man手册成普通文本格式(新)
★ sed的man手册(用的就是上面的方法)

★ 命令行参数简介
......

阅读全文(3928) | 评论:0

OpenFOAM类——Time类(2008-03-28 22:32:00)

摘要:

Time是一个很复杂的类,他继承了多达5个类——clock,cpuTime,TimePaths,OjbectRegistry和TimeState。上图是其引入的头文件列表。 下面将其组成进行分析:
从上面两图中可以看出该类十分庞大,具有大量的成员变量和成员函数,仅就其主要的进行详述,其他部分请参见原代码。

 ......

阅读全文(4078) | 评论:2

在这里写博客挺好的(2008-03-28 21:58:00)

摘要:在这里写博客挺好的,能够及时地将研究结果公布于众!......

阅读全文(2790) | 评论:1

OpenFOAM类——argList类(2008-03-28 21:37:00)

摘要:argList类的组成如下图所示:

私有成员变量的类型:
        stringList args_;
        HashTable<string> options_;         word executable_;
        fileName rootPath_;
        fileName globalCase_;
        fileName case_;
        bool parRun_;         ParRunControl parRunControl_;         // 与信号处理有关的成员变量
        sigFpe sigFpe_;
        sigInt sigInt_;
        sigQuit sigQuit_;
        sigSegv sigSegv_;

公有静态成员变量:
        static SLList<string> validArgs;
 ......

阅读全文(4717) | 评论:0