• <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í)我更愛(ài)姐汁...

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

            實(shí)現(xiàn)的目的是為了在一些特定情況下不去使用boost的filter_streambuf,不使用boost::iostreams的理由如下:
            1、基于運(yùn)行時(shí)配置的過(guò)濾器,效率稍低
            2、對(duì)于網(wǎng)絡(luò)通訊而言,boost的filter_streambuf乃至整個(gè)iostreams庫(kù)都顯得較為臃腫。
            所以,我自己編寫(xiě)了一套filter_streambuf,繼承了std::streambuf,并配合自己重新設(shè)計(jì)的archive和batch_data進(jìn)行網(wǎng)絡(luò)通訊,無(wú)論是效率還是易用性上都超出使用boost的iostreams。而boost的那套東西經(jīng)過(guò)我的反復(fù)使用后,覺(jué)得更適合用在文件讀寫(xiě)和數(shù)據(jù)持久化上。
            如果要說(shuō)哪里不如boost的filter_stream,也就是boost的filter_streambuf可以動(dòng)態(tài)配置filter,而我使用的是模板技術(shù)將filter的關(guān)系在編譯期就關(guān)聯(lián)了起來(lái),所以只能是靜態(tài)配置filter。下面是具體使用時(shí)的完整例子代碼:
             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 // 輸出過(guò)濾
             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 // 輸入過(guò)濾
            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 }

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

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

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

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

            評(píng)論

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

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

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

            贊一個(gè),簡(jiǎn)潔高效。  回復(fù)  更多評(píng)論   

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

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

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

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

            国产亚洲色婷婷久久99精品91 | 中文字幕久久精品无码| 久久久久久久久久久| 久久亚洲AV成人出白浆无码国产| 久久精品国产亚洲欧美| 久久精品一本到99热免费| 国产精品一区二区久久不卡 | 伊人伊成久久人综合网777| 国内精品伊人久久久久777| 亚洲国产精品久久久久久| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 久久九九久精品国产免费直播| 久久久久久伊人高潮影院| 国产精品久久久天天影视香蕉| 国产精品一区二区久久精品涩爱| 欧美亚洲国产精品久久蜜芽| 久久人人爽人人爽人人片AV不| 国产精品成人久久久久三级午夜电影 | 久久无码人妻一区二区三区午夜| 94久久国产乱子伦精品免费 | 久久久无码精品亚洲日韩软件| 午夜欧美精品久久久久久久| 久久久久综合中文字幕| segui久久国产精品| 久久久精品一区二区三区| 久久久久久九九99精品| 久久精品国产亚洲αv忘忧草| 久久噜噜久久久精品66| 久久综合狠狠综合久久激情 | 国产亚洲精品美女久久久| 一本久道久久综合狠狠爱| 亚洲午夜久久久影院伊人| 91麻豆国产精品91久久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区| 久久天堂AV综合合色蜜桃网 | 午夜精品久久久久久| 久久久久香蕉视频| 久久亚洲av无码精品浪潮| 国内精品久久久久影院网站 | 2021久久国自产拍精品| 久久婷婷国产综合精品|