百度空间 | 百度首页 
 
查看文章
 
ftp搜索引擎的设计和实现:4.5 Mapping类
2007-03-16 23:16

欢迎转载,但请注明出处,并给活力链接。谢谢      

       这一节来分析一个Fileinformation结构体数组对应于各个path文件的类。


         Fileinformation结构体数组是所有文件的基本信息,path文件包含的是目录和文件信息。通过Fileinformation结构体数组中的siteid、diroffset、fileoffset可以精确的定位到对应的path文件得到对应的路径和文件名。
         但是我们需要的不只这个功能。对于一个站点来说,我们还需要诸如以下功能:
“给出目录,得到该目录下的所有文件”
“给出Fileinformation结构体数组的一个索引,如果它是一个目录,得到该目录下的所有文件”
“给出Fileinformation结构体数组的一个索引,如果它是一个目录,得到该目录下的所有文件对应于Fileinformation结构体数组的索引”
    
         Mapping类封装了上面所说的这些功能。它的主要接口如下:

// 构造时,传入站点ip、该站点所有的文件在Fileinformation数组中的起始索引和终止索引
Mapping(const char* siteip,
           const INDEXTYPE startindex,
           const INDEXTYPE endindex,
           bool readonly=true);

// 给定Fileinformation数组的索引,判断该文件是否是目录
inline bool isDir(const INDEXTYPE idx);

//给定Fileinformation数组的索引,返回该文件的大小
inline long long getSize(const INDEXTYPE idx);

//给定Fileinformation数组的索引,返回该文件所在路径在对应的path文件中的偏移
inline int getDiroffset(const INDEXTYPE idx);

//给定一个目录在Fileinformation数组中的索引,返回它所包含的文件在Fileinformation数组中的索引
bool subDirFile(const INDEXTYPE idx,vector<int>& subfilesindex);

//给定一个目录在Fileinformation数组中的索引,返回它所包含的文件名和这些文件在Fileinformation数组中的索引
bool subDirFile(const string& dirpath,
                       vector<FILENAMEANDINDEX>& fileandindex);

//给点一个目录名和文件名,返回它在Fileinformation数组中的索引
bool dirFile(const string& dirpath,const string& dirname,int &index);

//给定Fileinformation数组的索引,改变Fileinformation数组中的项对应的文件大小
void changeSize(const INDEXTYPE idx,const long long size);

      Mapping类的完整代码在src/mapping/下,读者可自行查阅。

       那么这个类主要用于哪些地方?请读者们思考一下。下一节我接着分析。


类别:ftp搜索引擎 | | 添加到搜藏 | 分享到i贴吧 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2010 Baidu