青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

清風竹林

ぷ雪飄絳梅映殘紅
   ぷ花舞霜飛映蒼松
     ----- Do more,suffer less

datastream, C++數據序列化與反序列化容器

  其實本來不想自己寫這樣一個類的,但找來找去都沒有找到符合生活習慣的,于是在經過反復的推敲設計后,嗚,我終于承認自己功力不夠---無法將內存管理與迭代器完美地結合在一起,只好只好先用std::vector了,于是便有了下面的代碼。到目前為止還不能號稱功能完善,但,但應該基本可用了,堪堪記在這里,也許能給以后的自己一些幫助,或可得到高手指點一二:
  類文件被保存為datastream.hpp
#pragma once
/********************************************************************
created:    2008-10-13
author:        lixianmin

purpose:    used for data serialization and deserialization
Copyright (C) 2008 - All Rights Reserved
********************************************************************
*/
#include 
<vector>
#include 
<cassert>
class datastream:public std::vector<char>
{
public:
    datastream
& operator<<(bool data){return push(data);}
    datastream
& operator<<(char data){return push(data);}
    datastream
& operator<<(wchar_t data){return push(data);}
    datastream
& operator<<(short data){return push(data);}
    datastream
& operator<<(int data){return push(data);}
    datastream
& operator<<(long data){return push(data);}
    datastream
& operator<<(float data){return push(data);}
    datastream
& operator<<(double data){return push(data);}
    datastream
& operator<<(unsigned char data){return push(data);}    
    datastream
& operator<<(unsigned short data){return push(data);}    
    datastream
& operator<<(unsigned int data){return push(data);}
    datastream
& operator<<(unsigned long data){return push(data);}

    datastream
& operator>>(bool& data){return pop(data);}
    datastream
& operator>>(char& data){return pop(data);}
    datastream
& operator>>(wchar_t& data){return pop(data);}
    datastream
& operator>>(short& data){return pop(data);}
    datastream
& operator>>(int& data){return pop(data);}
    datastream
& operator>>(long& data){return pop(data);}
    datastream
& operator>>(float& data){return pop(data);}
    datastream
& operator>>(double& data){return pop(data);}
    datastream
& operator>>(unsigned char& data){return pop(data);}    
    datastream
& operator>>(unsigned short& data){return pop(data);}    
    datastream
& operator>>(unsigned int& data){return pop(data);}
    datastream
& operator>>(unsigned long& data){return pop(data);}

    datastream
& test(bool& data){memcpy(&data, &operator[](0), sizeof(data));return *this;}
    datastream
& test(char& data){memcpy(&data, &operator[](0), sizeof(data));return *this;}
    datastream
& test(short& data){memcpy(&data, &operator[](0), sizeof(data));return *this;}
    datastream
& test(int& data){memcpy(&data, &operator[](0), sizeof(data));return *this;}
    datastream
& test(long& data){memcpy(&data, &operator[](0), sizeof(data));return *this;}
    datastream
& test(float& data){memcpy(&data, &operator[](0), sizeof(data));return *this;}
    datastream
& test(double& data){memcpy(&data, &operator[](0), sizeof(data));return *this;}
    datastream
& test(unsigned char& data){memcpy(&data, &operator[](0), sizeof(data));return *this;}
    datastream
& test(unsigned short& data){memcpy(&data, &operator[](0), sizeof(data));return *this;}
    datastream
& test(unsigned int& data){memcpy(&data, &operator[](0), sizeof(data));return *this;}
    datastream
& test(unsigned long& data){memcpy(&data, &operator[](0), sizeof(data));return *this;}    

    
//std::string處理
    datastream& operator<<(const char* data){return push(strlen(data), (void*)data);}
    datastream
& operator<<(const wchar_t* data){return push(wcslen(data)<<1, (void*)data);}
    datastream
& operator<<(const std::string& data){return push(data.size(), (void*)data.c_str());}    
    datastream
& operator<<(const std::wstring& data){return push(data.size()<<1, (void*)data.c_str());}
    datastream
& operator>>(std::string& data)
    {
        size_t nSize;
        pop(nSize);
        std::vector
<char>::iterator first=begin(), last=first+nSize;
        data.assign(first, last);
        erase(first, last);
        
return *this;
    }
    datastream
& operator>>(std::wstring& data)
    {
        size_t nSize;
        pop(nSize);
        wchar_t
* a=(wchar_t*)&operator[](0), *b=a+(nSize>>1);
        data.assign(a, b);
        std::vector
<char>::iterator first=begin();    
        erase(first, first
+nSize);
        
return *this;
    }
    datastream
& test(std::string& data)
    {
        size_t nSize;
        test(nSize);
        std::vector
<char>::iterator first=begin()+sizeof(nSize);
        data.assign(first, first
+nSize);
        
return *this;
    }
    datastream
& test(std::wstring& data)
    {
        size_t nSize;
        test(nSize);
        wchar_t
* first=(wchar_t*)&operator[](sizeof(nSize));
        data.assign(first, first
+(nSize>>1));
        
return *this;
    }
    
//std::vector處理
    template<typename C>
    datastream
& operator<<(const std::vector<C>& data)
    {
        size_t nSize
=data.size();
        push(nSize);
        
for (int i=0; i<nSize; ++i)
        {
            
operator<<(data[i]);
        }
        
return *this;
    }
    template
<typename C>
    datastream
& operator>>(std::vector<C>& data)
    {
        size_t nSize;
        pop(nSize);
        C tmp;
        
for (int i=0; i<nSize; ++i)
        {
            
operator>>(tmp);
            data.push_back(tmp);
        }            
        
return *this;
    }
private:
    
char* inc_size(size_t delta_size)
    {
        size_t last_size
=size();
        resize(last_size
+delta_size);
        
return &operator[](last_size);
    }
    template
<typename C>
    datastream
& push(C data)
    {
        memcpy(inc_size(
sizeof(data)), &data, sizeof(data));
        
return *this;
    }
    datastream
& push(size_t size, void* data)
    {
        push(size);
        memcpy(inc_size(size), data, size);
        
return *this;
    }
    template
<typename C>
    datastream
& pop(C& data)
    {
        memcpy(
&data, &operator[](0), sizeof(data));
        erase(begin(), begin()
+sizeof(data));
        
return *this;
    }
};
  測試代碼:
#include <iostream>
#include 
<fstream>
#include 
<iterator>
#include 
"datastream.hpp"

template
<typename T>
void print_vector(const std::vector<T>& v)
{
    std::cout
<<"---------------------------Print Vector---------------------------"<<std::endl;
    std::copy(v.begin(), v.end(), std::ostream_iterator
<T>(std::cout, "\n"));
    std::cout
<<"-------------------------Print Vector End-------------------------"<<std::endl;
}
int main(int argc, char* argv[])
{
    std::
string strPath="c:\\abc.txt";

    std::vector
<std::string> v;
    v.push_back(
"hello world");
    v.push_back(
"向量測試");
    
    datastream ds;
    ds
<<318<<3.14159<<"hello world"<<std::string("中文測試")<<v;

    std::ofstream outfile(strPath.c_str());
    
if (outfile)
    {
        std::copy(ds.begin(), ds.end(), std::ostreambuf_iterator
<char>(outfile));
        outfile.close();
        std::cout
<<"write to file successfully!"<<std::endl;
    }
    
    ds.clear();                            
//清空數據(但不釋放ds的內存)
    std::ifstream infile(strPath.c_str());
    
if (infile)
    {
        ds.assign(std::istreambuf_iterator
<char>(infile), std::istreambuf_iterator<char>());    //別忘了std::vector有個assign函數
        int a;
        
double b;
        std::
string c, d;
        std::vector
<std::string> v2;
        ds
>>a>>b>>c>>d>>v2;
        datastream(ds).swap(ds);        
//釋放datastream內存
        std::cout<<"a="<<a<<", b="<<b<<", c="<<c<<", d="<<d<<std::endl;
        print_vector(v2);
    }
    system(
"pause");
    
return 0;
}
  輸出:
write to file successfully!
a=318, b=3.14159, c=hello world, d=中文測試
---------------------------Print Vector---------------------------
hello world
向量測試
-------------------------Print Vector End-------------------------
請按任意鍵繼續. . .








posted on 2008-10-15 14:55 李現民 閱讀(1758) 評論(0)  編輯 收藏 引用 所屬分類: 語法試煉

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            香蕉精品999视频一区二区| 欧美一区二区黄色| 欧美金8天国| 亚洲精品国精品久久99热| 国产亚洲成精品久久| 99视频精品在线| 夜夜夜精品看看| 亚洲午夜女主播在线直播| 亚洲欧美日韩国产中文在线| 亚洲一级在线| 一区免费在线| 亚洲国产一成人久久精品| 欧美日韩另类一区| 久久成人综合网| 久久久夜色精品亚洲| 亚洲精品久久7777| 亚洲婷婷综合久久一本伊一区| 国产伦一区二区三区色一情| 欧美aⅴ99久久黑人专区| 亚洲美女精品久久| 国产色婷婷国产综合在线理论片a| 久久亚洲国产精品日日av夜夜| 久久综合伊人77777蜜臀| 中文欧美日韩| 久久九九全国免费精品观看| 99国产一区| 欧美丝袜第一区| 玖玖在线精品| 欧美视频中文在线看| 久久综合九色99| 国产精品九色蝌蚪自拍| 欧美福利视频在线观看| 国产精品视频网址| 91久久久久久| 在线不卡亚洲| 99亚洲视频| 亚洲三级影院| 欧美一区二区在线播放| 久久嫩草精品久久久精品| 久久久久久久综合狠狠综合| 亚洲欧美日韩精品久久久| 免费亚洲电影在线| 亚洲国产日韩一区| 欧美在线三区| 午夜一区二区三区不卡视频| 欧美劲爆第一页| 久久一区二区三区超碰国产精品| 欧美视频三区在线播放| 亚洲国产精品电影| 99ri日韩精品视频| 欧美视频一区二区| 亚洲三级网站| 亚洲精品视频免费观看| 久久天天狠狠| 另类尿喷潮videofree| 国产日韩在线不卡| 亚洲欧美日韩综合一区| 午夜久久99| 国产精品亚洲综合久久| 一区二区三区毛片| 亚洲综合欧美日韩| 国产精品久久久久免费a∨大胸| 亚洲青色在线| 亚洲美女黄色片| 欧美理论在线| 一本色道久久综合狠狠躁的推荐| 一区二区三区福利| 亚洲性感美女99在线| 国产一区二区久久久| 欧美激情1区| 亚洲精品四区| 国产精品二区影院| 亚洲日本一区二区| 亚洲婷婷综合久久一本伊一区| 亚洲电影在线观看| 免费亚洲婷婷| 99国产精品99久久久久久| 午夜精品久久久久久久99水蜜桃| 国产精品捆绑调教| 久久精品国产亚洲一区二区| 久久久久欧美精品| 亚洲激情小视频| 欧美日韩高清在线观看| 在线中文字幕日韩| 久久在线免费视频| 亚洲日本中文字幕| 欧美日韩国产成人在线观看| 一区二区三区视频观看| 久久丁香综合五月国产三级网站| 国内一区二区三区| 欧美~级网站不卡| 亚洲午夜免费福利视频| 在线免费不卡视频| 欧美视频不卡中文| 久久久久久网| 日韩一区二区精品视频| 久久九九热免费视频| 亚洲国产裸拍裸体视频在线观看乱了| 欧美精品一区二区三| 日韩一二三在线视频播| 欧美自拍偷拍午夜视频| 亚洲精品日韩在线观看| 久久国产精品99国产| 日韩亚洲成人av在线| 国产午夜精品视频| 欧美日本中文字幕| 久久精品国产亚洲高清剧情介绍| 你懂的成人av| 久久一二三区| 性欧美18~19sex高清播放| 亚洲国产另类精品专区| 国产精品免费一区二区三区观看| 久久视频国产精品免费视频在线 | 欧美日韩精品免费观看视频| 亚洲欧美国产高清va在线播| 最新成人av网站| 久久麻豆一区二区| 国产精品区一区| 欧美精品亚洲二区| 久久一二三四| 久久国产精品第一页| 中文一区二区| 99精品视频免费全部在线| 欧美国产日韩免费| 久热精品在线视频| 久久精品最新地址| 在线亚洲高清视频| 日韩手机在线导航| 91久久精品国产91性色| 牛人盗摄一区二区三区视频| 欧美一级欧美一级在线播放| 亚洲网站视频| 一区二区三区蜜桃网| 亚洲精品视频在线观看网站| 亚洲国产老妈| 91久久精品日日躁夜夜躁欧美| 今天的高清视频免费播放成人 | 欧美午夜宅男影院在线观看| 久久蜜桃资源一区二区老牛 | 国产欧美精品一区aⅴ影院| 亚洲国产高潮在线观看| 精品成人在线视频| 国自产拍偷拍福利精品免费一| 欧美性大战久久久久久久| 欧美私人网站| 国产精品成av人在线视午夜片| 欧美视频日韩| 国产精品午夜春色av| 欧美护士18xxxxhd| 久久成人免费网| 久久久蜜臀国产一区二区| 另类综合日韩欧美亚洲| 欧美xxx成人| 亚洲国产清纯| 亚洲免费观看在线观看| 一区二区三区视频在线观看| 亚洲一区二区三区在线看| 亚洲欧美制服另类日韩| 久久精品国语| 欧美激情91| 国产精品青草久久| 精品1区2区| 最近中文字幕mv在线一区二区三区四区| 亚洲高清免费| 在线中文字幕一区| 欧美综合激情网| 欧美国产日韩一区二区三区| 亚洲三级性片| 欧美一区二区三区视频免费| 欧美波霸影院| 99re66热这里只有精品4| 亚洲女性裸体视频| 久久婷婷色综合| 欧美性一区二区| 一区二区视频免费完整版观看| 亚洲日韩欧美视频一区| 亚洲香蕉在线观看| 模特精品在线| 欧美伊人久久久久久午夜久久久久| 久久激情久久| 亚洲激情一区| 午夜精品久久久久久| 欧美国产91| 国精产品99永久一区一区| 亚洲精选中文字幕| 久久久九九九九| 一区二区三区不卡视频在线观看| 欧美在线免费| 欧美午夜免费电影| 亚洲国内精品| 久久久久国产精品麻豆ai换脸| 亚洲国产精品久久久久| 欧美有码视频| 欧美午夜电影一区| 亚洲免费久久| 免费在线亚洲| 久久久久久噜噜噜久久久精品| 国产精品www色诱视频| 亚洲全黄一级网站| 免费成人黄色av|