卢骏 · 2020年07月15日

svlib(2) – 目录操作

一、 Pathname类的使用

实现了一个类,Pathname来实现对目录的操作。该类的new方法是protected的,表示外部不可以调用new方法创建该对象实例。而是要通过其他方法来得到对象实例。

调用类的create方法,获取单例对象实例。需要传入待操作的目录。

1.jpg

以下是Pathname类提供的外部可以调用的方法:

2.png

如以下代码:

3.png

abs_dir设置为一个绝对路径的文件。
4.png

执行结果:

5.jpg

对于一个非绝对路径的文件。

6.png

执行结果,因为是相对路径,因此isAbsolute函数返回0。

7.jpg

二、 Pathname类解析

在Pathname类中,有一个qs类型的变量comp。

8.jpg

这是一个typedef定义的类型,在svlib_private_base_pkg.svh中,有定义。

9.png

qs是一个字符串类型的队列。

对于Pathname类,create方法。该方法,是获取单例对象。调用Obstack类,获取单例对象。然后调用Pathname类中的set方法。

10.jpg

对于Obstack,是一个参数化的类。参数就是类,这里就是Pathname。该类,继承Pathname,因此可以使用Pathname类的new方法,创建对象实例。

11.png

Pathname类的set方法。首先是调用Str类的create方法.

12.jpg

Str是一个类,该类的new方法也是protected,因此外部不能调用new方法创建该类对象实例。需要调用create方法,来获取对象实例。

13.png

同样是调用Obstack得到对象实例。然后调用Str类的setClean方法。其实就是将类中的protect变量value,设置为传入的参数。

14.png

调用Str类的split方法,对类中的value变量,按照指定的分隔符,进行切分,结果保存在动态数组components中。

15.png

将components中的内容,保存到 Pathname类的comps队列中。同时判断value的第一个字符内容是不是/,是的话,表示绝对路径,否则不是绝对路径。

假如传递的path为 /home/jun.lu/test/test.sv。

16.png

假如传递的path为../test/test.sv

17.jpg

Pathname类中的set,append,apendPN,copy方法,会对comps这个队列内容进行修改。

而Pathname类中的其他的方法,其实就是根据comps队列的内容,然后进行处理,返回不同的信息。

#### 更多相关阅读
sv与c之间字符串传递的DPI实现
svlib(1)-介绍
使用IMC将覆盖率转化为网页格式

原文首发于骏的世界博客
作者:卢骏
更多IC设计相关的文章请关注IC设计极术专栏,每日更新。

推荐阅读
关注数
20180
内容数
1307
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息