The best input is OUTPUT.

2016-04-04
SWIG中的指针

SWIG中的指针

SWIG有一个简单规则就是

Everything else is a pointer

即除了基本的类型以外的其他数据类型,swig全部通过指针来处理。大致过程就是将操作C/C++中的结构,类,数组等是通过操作指向这些数据的指针操作,封装成python的数据也是一个包含指针信息的python对象。
C/C++的指针在python中是通过一个特殊的对象来保存的,在python中的变量保存的C/C++的数组以及类对象其实就是保存的这些指针对象,然后封装函数也是操作指针来操作真正的结构和数组等对象。

Read More

2016-04-03
SWIG给C结构增加‘成员函数’

SWIG给C结构增加‘成员函数’

由于之前看的是《Python科学计算》上面关于swig的简单介绍,上面说了如何在python中如何像类一样的使用C结构,但是也只是停留在如何使用结构的成员数据上,但是没有讲如何将C的函数封装成python的类方法的方法。相反由于C++有原生OOP的支持,固然swig直接可以将C++的类封装成python的类。所以我以前一直认为这时候只能用C++了。
但其实,还是读书读的少啊。swig这么强大的封装工具,这早就想到了。毕竟OO是一种思想,C照样能写出OO的代码来(多重继承和多态这种行么?)。

所以今天看到swig文档中关于%extend指令的介绍才感觉相见恨晚啊。

Read More

2016-04-02
在CMake中使用SWIG构建封装模块

在CMake中使用SWIG构建封装模块

由于CMake与SWIG的相互支持,使得在cmake脚本中直接定义封装模块的构建成为可能,KMCLib中也是使用这种方式直接使用swig进行自动封装。也就是在生成的Makefile中包含了使用swig命令封装库文件。

在这里我主要参考了swig文档中关于cmake的部分cmake文档中使用swig的部分

Read More

2016-04-02
初识代码封装工具SWIG

初识代码封装工具SWIG

这不是我最早使用swig了,之前在写Kynetix的时候就使用了swig为python封装了C语言写的扩展模块。但是当时我对C++还不是很了解,对其中的一些概念也只是拿来直接用,没有理解到底是什么,为什么会有这种功能。所以昨天我又拿出了《python科学计算》这本书来温习了一下swig那一部分,果然对swig又有了新的认识。

对swig真正全的使用都在swig的文档中有详细的介绍,而且由于swig支持很多种语言,例如java、python、Tcl等,因此这份文档内容相当的丰富。由于现在还没有很好的中文资源,所以现在只能默默的看英文文档了。

Read More

2016-03-31
KMCLib中的Matcher

KMCLib中的Matcher

这个类算是KMCLib中最后一个大类了,也回答了我在看代码之初有的很多疑问,例如如何更新匹配相关的信息,如何更新事件列表等。
这个类是没有成员数据的,可以把Matcher类看作是与匹配相关的函数的封装。

但是在头文件中却定义了两个相关的结构来存储操作信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/// A minimal struct for representing a task with a rate.
struct RateTask
{
int index;
int process;
double rate;
};


/// A minimal struct for representing a remove task.
struct RemoveTask
{
int index;
int process;
};

Read More

2016-03-29
发现了KMCLib中的数组内存越界隐患

发现了KMCLib中的数组内存越界隐患

之前在看代码的时候就发现了这个问题,就是在初始化configuration的match_lists的时候,最后一步是为configuration分配内存空间,但是作者使用的是match_lists中的第一个minimal_match_list的长度来分配内存,这样就留下了数组越界的隐患,我写了个单元测试,测试了下,果然!
因为由于周期性边界条件的原因,第一个minimal_match_list可能并不是长度最长的


于是我就向leetmaa/KMCLib的主分支提交了自己的代码,今天他接受了我的pull requests。具体的pull request信息以及我做的bug修复就不多扯了,贴上github上的链接来好了:
Fix the out-of-bound bug by PytLab · Pull Request #5 · leetmaa/KMCLib

Read More