• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ACG狂人

            其實(shí)我更愛姐汁...

            終于完成了自己的模板設(shè)計,初步實(shí)現(xiàn)了filter_streambuf,cge項目啟動......

            實(shí)現(xiàn)的目的是為了在一些特定情況下不去使用boost的filter_streambuf,不使用boost::iostreams的理由如下:
            1、基于運(yùn)行時配置的過濾器,效率稍低
            2、對于網(wǎng)絡(luò)通訊而言,boost的filter_streambuf乃至整個iostreams庫都顯得較為臃腫。
            所以,我自己編寫了一套filter_streambuf,繼承了std::streambuf,并配合自己重新設(shè)計的archive和batch_data進(jìn)行網(wǎng)絡(luò)通訊,無論是效率還是易用性上都超出使用boost的iostreams。而boost的那套東西經(jīng)過我的反復(fù)使用后,覺得更適合用在文件讀寫和數(shù)據(jù)持久化上。
            如果要說哪里不如boost的filter_stream,也就是boost的filter_streambuf可以動態(tài)配置filter,而我使用的是模板技術(shù)將filter的關(guān)系在編譯期就關(guān)聯(lián)了起來,所以只能是靜態(tài)配置filter。下面是具體使用時的完整例子代碼:
             1 #include <ccs/util/ios/ifilter_streambuf.hpp>
             2 #include <ccs/util/ios/ofilter_streambuf.hpp>
             3 #include <ccs/util/ios/memory_terminal.hpp>
             4 
             5 using namespace ccs;
             6 using namespace util;
             7 
             8 // 輸出過濾
             9 struct my_ofilter
            10 {
            11     typedef ios::ofilter_tag tag_type;
            12 
            13     template<typename OutT>
            14     std::streamsize write(const char* p, std::streamsize n, OutT& _out)
            15     {
            16         std::streamsize i = 0;
            17         for (; i < n; ++i)
            18         {
            19             char c = p[i];
            20             if (_out.write(&++c, 1!= 1)
            21                 break;
            22         }
            23         return i;
            24     }
            25 };
            26 
            27 // 輸入過濾
            28 struct my_ifilter
            29 {
            30     typedef ios::ifilter_tag tag_type;
            31 
            32     template<typename InT>
            33     std::streamsize read(char* p, std::streamsize n, InT& _in)
            34     {
            35         std::streamsize i = 0;
            36         for (; i < n; ++i)
            37         {
            38             char c;
            39             if (_in.read(&c, 1!= 1)
            40                 break;
            41             p[i] = --c;
            42         }
            43         return i;
            44     }
            45 };
            46 
            47 // 輸出內(nèi)存設(shè)備
            48 struct memory_odevice
            49 {
            50     typedef ios::dest_tag tag_type;
            51 
            52     std::streamsize write(const char* p, std::streamsize n, ios::memory_oterminal& _out)
            53     {
            54         return _out.write(p, n);
            55     }
            56 };
            57 
            58 // 輸入內(nèi)存設(shè)備
            59 struct memory_idevice
            60 {
            61     typedef ios::source_tag tag_type;
            62 
            63     std::streamsize read(char* p, std::streamsize n, ios::memory_iterminal& _in)
            64     {
            65         return _in.read(p, n);
            66     }
            67 };
            68 
            69 
            70 int main(int _Argc, char** _Args)
            71 {
            72     char buf[256];
            73     ios::memory_oterminal memout(buf, 256);
            74     ios::memory_iterminal memin(buf, 256);
            75     ios::ifilter_streambuf<ios::memory_iterminal, mpl::list2<my_ifilter, memory_idevice> > insbuf(&memin);
            76     ios::ofilter_streambuf<ios::memory_oterminal, mpl::list2<my_ofilter, memory_odevice> > outsbuf(&memout);
            77     std::istream is(&insbuf);
            78     std::ostream os(&outsbuf);
            79 
            80     int num = 188;
            81     os.write((char*)&num, sizeof(int));
            82     os.flush();
            83     is.read((char*)&num, sizeof(int));
            84 
            85     std::cout << num << std::endl;
            86     system("pause");
            87 }

            代碼中的意思就是將寫入的數(shù)據(jù)逐字節(jié)的加1,并保存在內(nèi)存緩沖里,然后又從內(nèi)存緩沖中讀出,逐字節(jié)減1,并輸出到控制臺,一套經(jīng)過過濾的讀寫流便完成了。由于使用了模板元的list作為鏈接,在release模式下所有的過濾器操作都是內(nèi)聯(lián)的,這雖然也是我預(yù)想的效果,但看完匯編碼之后,著實(shí)讓我高興了一晚上,這種成就感真的是programer最大的樂趣。

            需要說明的是:代碼中的mpl::list2是自己實(shí)現(xiàn)的模板元鏈表...過段時間考慮研究一下boost的并替換過來,因為那個list后面的2讓我覺得很不夠智能...當(dāng)然,如果boost的list實(shí)現(xiàn)過于復(fù)雜,或是不能讓我的代碼完全內(nèi)聯(lián)化的話,肯定不會考慮使用。

            完成這個之后,我便準(zhǔn)備著手構(gòu)建cge項目,所謂的cge,就是cloud game engine的縮寫...顧名思義就是使用了云技術(shù)的游戲引擎,我想在業(yè)余時間嘗試一些顛覆傳統(tǒng)cs架構(gòu)的在線游戲引擎架構(gòu)設(shè)計,具體難點(diǎn)估計會有2個:
            1、運(yùn)用gpgpu group的并行運(yùn)算技術(shù),考慮使用目前市場占用率最大的nvidia tesla服務(wù)器配合cuda,在服務(wù)器用physX實(shí)現(xiàn)一定的物理模擬。
            2、在即時性較強(qiáng)的在線游戲中,ping值一直是最大的挑戰(zhàn),所以有選擇性的使用云計算技術(shù),這是架構(gòu)設(shè)計上的挑戰(zhàn)。
            關(guān)于cge的設(shè)計思考和規(guī)劃,會另外開貼具體闡述,并記錄開發(fā)進(jìn)度和情況。

            posted on 2010-10-12 19:37 釀妹汁 閱讀(2940) 評論(4)  編輯 收藏 引用 所屬分類: C++

            評論

            # re: 終于完成了自己的模板設(shè)計,初步實(shí)現(xiàn)了filter_streambuf,cge項目啟動...... 2010-10-14 10:22 陳梓瀚(vczh)

            cge囧……  回復(fù)  更多評論   

            # re: 終于完成了自己的模板設(shè)計,初步實(shí)現(xiàn)了filter_streambuf,cge項目啟動......[未登錄] 2010-10-14 11:46 jans2002

            贊一個,簡潔高效。  回復(fù)  更多評論   

            # re: 終于完成了自己的模板設(shè)計,初步實(shí)現(xiàn)了filter_streambuf,cge項目啟動...... 2010-10-16 19:09 納尼!!!

            囧...囧啥= =  回復(fù)  更多評論   

            # re: 終于完成了自己的模板設(shè)計,初步實(shí)現(xiàn)了filter_streambuf,cge項目啟動......[未登錄] 2010-12-25 23:36 expter

            不知道你讀寫是用memcpy還是自己寫的數(shù)據(jù)流的方式。,  回復(fù)  更多評論   

            伊人久久大香线蕉综合影院首页| 久久精品国产亚洲αv忘忧草| 精品久久久久久亚洲精品 | 国产精品美女久久久久网| 国内精品久久久久久99蜜桃| 国内精品久久久久久久久| 久久天天婷婷五月俺也去 | 亚洲色大成网站www久久九| 久久国产精品一国产精品金尊| 99久久成人18免费网站| 久久久久免费精品国产| 久久精品国产亚洲一区二区| 亚洲国产成人久久综合野外| 色综合久久久久| 亚洲AV日韩精品久久久久久久| 国产三级精品久久| 国产欧美久久一区二区| 亚洲精品美女久久777777| 久久久久久极精品久久久| 93精91精品国产综合久久香蕉| 777午夜精品久久av蜜臀| 久久亚洲高清综合| 99精品国产在热久久| 亚洲精品高清国产一线久久| 伊人久久大香线蕉综合5g| 久久国产成人午夜AV影院| 国产精品久久久久无码av| 久久人人爽爽爽人久久久| 囯产极品美女高潮无套久久久| 欧美久久久久久午夜精品| 久久国产香蕉视频| 一级做a爰片久久毛片16| 久久国产精品久久| 国产一区二区三区久久| 国产 亚洲 欧美 另类 久久| 99久久精品国产一区二区| 欧美精品一区二区精品久久| AAA级久久久精品无码区| 丁香五月综合久久激情| 久久乐国产精品亚洲综合| 日韩亚洲国产综合久久久|