• <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 釀妹汁 閱讀(2953) 評(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)論   

            亚洲欧洲中文日韩久久AV乱码| 亚洲午夜无码AV毛片久久| 久久国产高潮流白浆免费观看| 国产精品久久永久免费| 久久国产视频网| 97精品伊人久久久大香线蕉| 久久精品国产亚洲精品2020| 国产精品99久久久久久猫咪| 国产激情久久久久久熟女老人| 久久成人精品视频| 久久久久久久女国产乱让韩| …久久精品99久久香蕉国产 | 久久婷婷是五月综合色狠狠| 国产69精品久久久久久人妻精品| 久久久久久狠狠丁香| 久久久久亚洲av综合波多野结衣 | 亚洲国产精品无码久久一区二区 | 国产精品美女久久久久网| 亚洲国产日韩欧美综合久久| 国产精品久久久久久搜索| 亚洲中文字幕无码一久久区| 久久久久亚洲精品男人的天堂| 久久久久久九九99精品| 亚洲欧美另类日本久久国产真实乱对白| 久久国产精品一国产精品金尊| 久久久精品人妻一区二区三区蜜桃| 国产午夜久久影院| 国产亚洲综合久久系列| 三级三级久久三级久久| 久久久久婷婷| 久久久国产亚洲精品| 久久这里只精品99re66| 中文字幕亚洲综合久久菠萝蜜| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久久久久国产a免费观看黄色大片 | 69SEX久久精品国产麻豆| 日韩人妻无码精品久久免费一| 国内精品九九久久精品| 午夜天堂av天堂久久久| 久久久一本精品99久久精品66| 亚洲精品乱码久久久久久蜜桃不卡|