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

清風竹林

ぷ雪飄絳梅映殘紅
   ぷ花舞霜飛映蒼松
     ----- 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>
            国产欧美精品日韩精品| 亚洲婷婷综合久久一本伊一区| 曰本成人黄色| 国内成+人亚洲+欧美+综合在线| 国产九色精品成人porny| 国产精品久久国产三级国电话系列| 欧美视频精品在线| 国产免费观看久久| 精品动漫3d一区二区三区免费版| 亚洲精品资源美女情侣酒店| 日韩一区二区精品视频| 亚洲欧美激情四射在线日 | 亚洲午夜精品在线| 羞羞答答国产精品www一本| 久久精品国产亚洲精品| 女仆av观看一区| 欧美视频在线观看一区| 国产精品久久久久一区| 狠狠色香婷婷久久亚洲精品| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲欧洲精品成人久久奇米网| 久久久精品一区| 亚洲日本va午夜在线电影| 国产亚洲一区在线播放| 在线精品一区二区| 亚洲乱码视频| 在线精品视频一区二区| 精品成人在线视频| 亚洲免费观看高清在线观看| 亚洲夜间福利| 久久久美女艺术照精彩视频福利播放| 久久久久久91香蕉国产| 欧美激情黄色片| 在线亚洲一区| 久久精品视频在线播放| 欧美激情一二区| 国产欧美日韩精品a在线观看| 精品成人在线观看| 亚洲视频播放| 玖玖玖国产精品| aa级大片欧美| 久久综合激情| 国产精品成人aaaaa网站| 亚洲美女在线国产| 日韩午夜免费| 新67194成人永久网站| 欧美成人精品影院| 国产婷婷一区二区| 99国产一区二区三精品乱码| 久久精品国产99国产精品澳门| 欧美成ee人免费视频| 99国产精品久久久久老师| 欧美一区二区三区视频在线观看 | 狼狼综合久久久久综合网| 欧美日韩中文另类| 亚洲第一精品在线| 久久久久成人精品| 99国产精品99久久久久久粉嫩| 久久成人精品电影| 亚洲激情在线观看视频免费| 午夜精品视频一区| 亚洲国产成人在线| 欧美伊人久久久久久午夜久久久久 | 亚洲视频在线观看一区| 亚洲无限av看| 午夜精品视频在线| 美女网站久久| 一区在线播放视频| 性欧美长视频| 亚洲一区二区三区四区在线观看 | 麻豆久久久9性大片| 在线一区日本视频| 欧美激情在线观看| 亚洲欧美中日韩| 国产精品多人| 亚洲一区二区三区久久| 亚洲人成网站色ww在线| 美女精品自拍一二三四| …久久精品99久久香蕉国产 | 欧美在线视频二区| 亚洲一区精品电影| 欧美午夜精品一区| 一区二区三区日韩| 一区二区久久久久| 欧美日韩精选| 一区二区视频免费完整版观看| 亚洲一区二区欧美日韩| 欧美不卡视频| 欧美尤物一区| 国产日韩精品视频一区| 亚洲欧美综合国产精品一区| 亚洲视频免费在线观看| 国产欧美日韩激情| 久久午夜视频| 欧美国产日韩免费| 亚洲欧美另类国产| 午夜精品视频在线| 在线观看国产一区二区| 欧美在线观看视频一区二区| 欧美一区二区三区四区高清| 欧美日韩专区| 久久99在线观看| 欧美成人精精品一区二区频| 亚洲午夜电影网| 亚洲欧美在线高清| 精品成人在线视频| 亚洲麻豆视频| 欧美午夜国产| 小处雏高清一区二区三区 | 欧美亚一区二区| 亚洲午夜视频在线观看| 亚洲一区二区三区在线看| 国产午夜精品全部视频在线播放 | 一区二区三区视频在线观看| 久久久美女艺术照精彩视频福利播放| 在线亚洲免费| 欧美日韩一区二区在线 | 欧美国产大片| 一区二区欧美在线观看| 亚洲一区中文| 亚洲成人资源| 日韩天天综合| 影音先锋在线一区| 99精品国产在热久久| 国产亚洲观看| 99re6热在线精品视频播放速度| 国产精品久久久久aaaa九色| 久久一区欧美| 国产精品你懂得| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品一区视频网站| 最新高清无码专区| 激情一区二区三区| 亚洲一区二区三区高清不卡| 亚洲精品护士| 久久av一区二区三区亚洲| 日韩视频一区二区| 久久精品夜色噜噜亚洲aⅴ| av不卡在线看| 女同性一区二区三区人了人一| 久久精品亚洲乱码伦伦中文| 欧美色欧美亚洲高清在线视频| 欧美大片免费| 激情综合激情| 亚洲美女福利视频网站| 欧美视频专区一二在线观看| 午夜久久久久久| 国产精品久久午夜夜伦鲁鲁| 91久久久久久国产精品| 亚洲欧洲日夜超级视频| 久久九九免费| 久久综合99re88久久爱| 国产一区二区成人| 午夜精品视频网站| 久久成人精品视频| 国产亚洲亚洲| 久久成人精品电影| 久久综合九色综合欧美就去吻| 国产久一道中文一区| 亚洲欧美日韩国产一区二区| 亚洲在线观看视频网站| 国产精品激情| 亚洲影视在线| 亚洲一区二区成人| 久久综合999| 亚洲一区高清| 99热免费精品| 欧美激情一区二区三区蜜桃视频| 国产精品久久久久久户外露出| 一本大道久久精品懂色aⅴ | 亚洲人成免费| 一级日韩一区在线观看| 欧美国产日韩一区二区在线观看| 亚洲第一福利视频| 亚洲人体一区| 欧美三日本三级三级在线播放| 亚洲深夜福利| 久久久精品性| 国产美女精品视频| 亚洲视频精品在线| 亚洲区一区二| 欧美紧缚bdsm在线视频| 中文高清一区| 久久久精品日韩| 一本色道久久加勒比精品 | 欧美日韩美女在线| 在线视频欧美精品| 欧美日韩一二三区| 亚洲免费观看| 欧美日韩亚洲国产一区| 亚洲精品综合| 久久精品国产亚洲aⅴ| 在线观看欧美精品| 欧美日韩在线直播| 久久精品国产第一区二区三区最新章节| 免费在线视频一区| 亚洲天天影视| 在线免费观看成人网| 国产精品久久久久aaaa樱花| 久久色在线观看|