• <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 釀妹汁 閱讀(2927) 評論(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還是自己寫的數據流的方式。,  回復  更多評論   

            久久99国产综合精品免费| 久久久久精品国产亚洲AV无码| 国产精品一区二区久久不卡| 97久久超碰国产精品旧版| 国产精品久久久久影院嫩草 | 色婷婷综合久久久中文字幕| 国产人久久人人人人爽| 久久综合九色欧美综合狠狠 | 亚洲欧洲精品成人久久曰影片| 一本久久a久久精品vr综合| 国产精品99精品久久免费| 久久最新免费视频| 久久国产精品久久精品国产| 亚洲精品无码久久不卡| 蜜桃麻豆www久久| 久久水蜜桃亚洲av无码精品麻豆| 久久久国产精品| 四虎国产精品免费久久久| 人妻无码αv中文字幕久久琪琪布| 久久免费视频一区| 很黄很污的网站久久mimi色| 久久久久久国产精品免费无码| 久久婷婷人人澡人人爽人人爱 | 久久久久99精品成人片三人毛片 | 久久久久久久亚洲Av无码| 亚洲欧美久久久久9999 | 一级A毛片免费观看久久精品| 国产精品久久影院| 久久精品国产第一区二区三区 | 久久久91精品国产一区二区三区 | 久久99国产精品久久99果冻传媒| 亚洲精品午夜国产VA久久成人 | 国产精品成人久久久久久久| 国内精品九九久久久精品| 久久免费的精品国产V∧| 久久亚洲欧美国产精品| 欧美午夜精品久久久久免费视| 久久综合给久久狠狠97色| 国产精品美女久久久久网| 久久99国产亚洲高清观看首页| 亚洲一区中文字幕久久|