2011年6月29日星期三

  虚拟文件系统观后感

。。。我靠,我记得小时候看完个电影什么的老师就让写观后感,我通常是玩一天,然后第二天到学校随便抄个同学的。

虚拟文件系统(VFS),是我参加工作后做的第一个东西,当时刚从大学出来,而且C++是自学的,很分散,由此可知该系统被我做的是多么失败。
之后在游戏的开发过程中,该系统是用不上的了,估计老大是实在看不下去了,就自己重新写了个。但我也一直没有时间看,这两天反正离职在家,就看了下这个,学到不少。

首先是看代码,不会看,就用比较笨的方法,就像是在大学刚学C的时候——抄代码。区别是之前是纸和笔,现在是直接敲代码了。大体知道下先从哪个文件开始抄,就一个接一个文件往下顺吧。

一个是发现有好多好用的系统函数或结构。
1. sscanf.这个函数其实在很早很早以前就知道的,早在还在看C++基础教程什么的时候。但之后就没怎么用过,一直用sprintf什么的,看到这个函数的应用真是让我惭愧到羞愧到尬尴。因为之前有什么字符串转数字格式总是头疼,有了这个就好说了

char szFloat[MAX_PATH] = "";
sprintf_s(szFloat,"%d.%d",99,88);
float fResult = 0.0f;
sscanf((const char*)szFloat,"%f",&fResult);

这样组合一个小数多容易啊哈哈哈,唉…

2. struct _stat. 获取文件的状态信息

struct _stat    s;
if (!_stat(FileName, &s))
    info.uTime = (unsigned int)s.st_mtime;

3. memchr:Finds characters in a buffer.
悲剧啊,这么好用的函数居然不知道啊,之前都是悲催的自己写..

4.还有一些多线程的函数,对多线程没怎么用过甚至就没怎么学过,所以看到这些函数还是懵一下的.
话说VFS的数据同步安全还是很重要的说,当时我自己写VFS时那互斥什么的用的。。现在想起来真是惭愧到羞愧到尬尴。

5.PathCanonicalize;规范化路径字符串。 好,又多记录一条对路径操作的函数了。

好吧,以上算是系统本来就有的一些零散的东西。下面还有些有用的东西:

1. SmartPtr:翻译成中文应该是智能指针。。
都知道在一个函数中new数据了,在离开函数之前就要del的,好吧,如果这是个SmarPtr,哈哈,不用手动del了,等执行到其析构函数就自动帮你del了。
2.引用计数。这个应该熟悉点,就是对象被别的地方引用了就增加一次计数,用完了再减一次计数,等到计数为0就delete this.计数中也有多线程数据同步的问题,所以用InterlockedIncrement这个函数。
3. 算出一个字符串的HASH,可以搞些唯一ID什么的

for (int i = 0; pString[i]; i++)
  {
    c = pString[i];
    if (c >= 'A' && c <= 'Z')
      c += 0x20;  //中文字符不用转换大小写
    else if (c == '/')
      c = '\\';
    Id = (Id + (i + 1) * c) % 0x8000000b * 0xffffffef;
  }

return (Id ^ 0x12345678)
4.又得到一些好用的关于文件或文件路径等操作的函数。
5.资源释放3种类型,free,delete,Release()
6.内存池。之前写寻路时自己写过一个内存池,其实是直接复制的网上的一个模板。这里有个内存池模板,还有多线程的数据保护措施。。。
7.知道了几种压缩数据的方法或库或算法吧:lzma,ucl;之前我用的是zlib;我看还有一种默认的压缩方法,我靠,这是什么方法啊:

for (size_t i = 0; i < nSrcLen; i++)
    {
        pDestBuffer[i] = i ^ pSrcBuffer[i];
    }

同样,解压:

for (size_t i = 0; i < nSrcLen; i++)
    {
        pDestBuffer[i] = i ^ pSrcBuffer[i];
    }

没有评论:

发表评论