• <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狂人

            其實我更愛姐汁...

            終于完成了自己的模板設計,初步實現了filter_streambuf,cge項目啟動......

            實現的目的是為了在一些特定情況下不去使用boost的filter_streambuf,不使用boost::iostreams的理由如下:
            1、基于運行時配置的過濾器,效率稍低
            2、對于網絡通訊而言,boost的filter_streambuf乃至整個iostreams庫都顯得較為臃腫。
            所以,我自己編寫了一套filter_streambuf,繼承了std::streambuf,并配合自己重新設計的archive和batch_data進行網絡通訊,無論是效率還是易用性上都超出使用boost的iostreams。而boost的那套東西經過我的反復使用后,覺得更適合用在文件讀寫和數據持久化上。
            如果要說哪里不如boost的filter_stream,也就是boost的filter_streambuf可以動態配置filter,而我使用的是模板技術將filter的關系在編譯期就關聯了起來,所以只能是靜態配置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 // 輸出內存設備
            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 // 輸入內存設備
            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 }

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

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

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

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

            評論

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

            cge囧……  回復  更多評論   

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

            贊一個,簡潔高效。  回復  更多評論   

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

            囧...囧啥= =  回復  更多評論   

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

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

            伊人久久大香线蕉AV色婷婷色| 久久精品极品盛宴观看| 久久九九精品99国产精品| 亚洲精品无码久久久久去q| 国内精品久久久久久99| 精品久久久久久亚洲| 久久国产综合精品五月天| 久久人人爽人人爽人人片av麻烦| 青青草原精品99久久精品66| 大伊人青草狠狠久久| 免费精品久久天干天干| 久久99国产精品一区二区| 欧美亚洲国产精品久久高清| 72种姿势欧美久久久久大黄蕉| 青春久久| 国产日韩久久免费影院| 性做久久久久久久| 四虎影视久久久免费| 中文字幕亚洲综合久久| 综合网日日天干夜夜久久| 久久久精品久久久久久 | 久久综合视频网| 91精品免费久久久久久久久| 久久亚洲精品成人AV| 久久成人小视频| 色综合久久88色综合天天 | 国产精品九九久久免费视频 | 久久国产综合精品五月天| 免费观看成人久久网免费观看| 99蜜桃臀久久久欧美精品网站| 久久精品亚洲乱码伦伦中文 | 久久九九全国免费| 久久国产高潮流白浆免费观看| 久久精品中文字幕一区| 久久亚洲国产最新网站| 亚洲?V乱码久久精品蜜桃| 久久精品国产黑森林| 久久精品国产只有精品66| 少妇久久久久久被弄到高潮 | 免费观看久久精彩视频| 久久91精品国产91久久小草|