Posted by 每特17劃 on 2007-01-28

大於與小於50000的差異

在 zhcon 的 basefont.cpp 中看到這一段程式碼時, 心中突然有了些感觸。

下面所記載的程式碼,主要的目的是判斷在字型檔大於 5000 bytes 時,就改採用 memory mapped 的方式來配置,因為 CJK 所用的字型大部分大於這個容量,所以得另外作一些處理。 而這些細心的念頭, 是在 FreeType 的 PCF部分,還有 libXFont 的 PCF中找不到的。 想當然爾,國外地區的 Hackers 只需要用到 ASCII 的字型,誰會去關心這樣的細節呢?

因此,對於這些 CJK 的基礎建設,我們更應該主動去作才是。

若我們不作,還有誰會來作?

    if (mBufSize > 50000) {
        //hzfont use mmap
        mpBuf = (char *) mmap((caddr_t) 0, mBufSize, PROT_READ,
                    MAP_FILE | MAP_SHARED, mFd, (off_t) 0);
        if (mpBuf == MAP_FAILED)
            throw (runtime_error("error in mmap gbfont!"));
    } else {
        //ascii font read to buffer
        mpBuf = (char *) new char[mBufSize];
        unsigned nread = read(mFd, mpBuf, mBufSize);
        if (nread != mBufSize)
            throw (runtime_error("error in reading asciifont!"));
    }