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

清風竹林

ぷ雪飄絳梅映殘紅
   ぷ花舞霜飛映蒼松
     ----- 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 李現民 閱讀(1765) 評論(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>
            亚洲啪啪91| 亚洲人精品午夜在线观看| 亚洲欧美激情视频| 一区二区日韩| 日韩午夜三级在线| 一区二区三区蜜桃网| 亚洲一二三区精品| 篠田优中文在线播放第一区| 亚洲午夜精品国产| 午夜在线电影亚洲一区| 久久精品色图| 欧美高清自拍一区| 国产精品福利在线观看| 国产欧美一区二区三区视频| 极品日韩久久| 99视频国产精品免费观看| 亚洲愉拍自拍另类高清精品| 久久久久久欧美| 亚洲国产三级| 国产一区自拍视频| 国产精品推荐精品| 精品1区2区3区4区| 一区二区三区国产| 久久激情一区| 亚洲黄网站在线观看| 亚洲午夜精品久久久久久app| 久久精品视频在线观看| 欧美激情a∨在线视频播放| 国产精品国产三级欧美二区 | 91久久久久| 一本一本久久| 老巨人导航500精品| 国产精品xxxav免费视频| 一区在线免费观看| 销魂美女一区二区三区视频在线| 免费欧美日韩| 午夜亚洲福利在线老司机| 欧美激情一区三区| 狠狠狠色丁香婷婷综合激情| 一区二区三区久久网| 久久综合伊人| 羞羞色国产精品| 欧美日韩国产一区二区三区| 精品9999| 久久精品国产v日韩v亚洲| 99国内精品久久| 久热精品视频在线免费观看| 国产精品免费网站| 制服诱惑一区二区| 亚洲韩国青草视频| 麻豆精品传媒视频| 禁久久精品乱码| 久久久水蜜桃av免费网站| 一区二区三区高清不卡| 欧美人与性动交cc0o| 亚洲国产mv| 蜜桃精品久久久久久久免费影院| 性欧美暴力猛交另类hd| 国产精品一区二区久激情瑜伽| 在线一区二区日韩| 日韩视频在线免费观看| 99视频精品| 欧美女主播在线| 91久久国产综合久久91精品网站| 久久人人爽人人爽爽久久| 亚洲男人影院| 国产精品入口尤物| 亚洲欧美综合一区| 亚洲欧美成人在线| 国产欧美欧美| 久久人人爽人人| 欧美一区二区久久久| 国产欧美一区视频| 久久激情综合| 欧美亚洲视频| 欧美成人午夜免费视在线看片| 国产日韩欧美成人| 午夜精品免费视频| 午夜欧美精品| 黄色亚洲网站| 亚洲国产va精品久久久不卡综合| 欧美aa国产视频| 在线一区二区三区四区| 亚洲无线一线二线三线区别av| 国产精品亚洲第一区在线暖暖韩国| 欧美有码在线观看视频| 欧美专区一区二区三区| 91久久国产综合久久| 亚洲最黄网站| 国产一区高清视频| 久久久亚洲欧洲日产国码αv| 久久国产精品一区二区三区| 亚洲黄一区二区三区| 一本久久综合| 国内精品久久久久久久影视蜜臀| 欧美成人嫩草网站| 欧美日韩国产一区精品一区| 午夜免费在线观看精品视频| 久久精品女人天堂| 日韩视频欧美视频| 亚洲在线成人精品| 亚洲韩国精品一区| 亚洲一区二区伦理| 亚洲欧洲日产国产综合网| 亚洲一区二区三区在线播放| 黄色av成人| 正在播放亚洲一区| 亚洲国产精品视频一区| 亚洲午夜小视频| 在线观看欧美激情| 亚洲欧美激情在线视频| 日韩午夜电影av| 久久精品成人一区二区三区 | 国产一区二区三区av电影| 欧美国产91| 国产亚洲欧美日韩在线一区| 亚洲欧洲综合| 亚洲高清网站| 午夜老司机精品| 亚洲网址在线| 欧美区视频在线观看| 美女尤物久久精品| 国产日产亚洲精品系列| 一区二区三区日韩欧美| 亚洲精品影视在线观看| 久久亚洲视频| 麻豆久久精品| 国产综合色产| 久久久国产视频91| 欧美香蕉大胸在线视频观看| 亚洲日韩欧美一区二区在线| 在线观看欧美黄色| 久久精品一二三| 久久久国产91| 国产偷自视频区视频一区二区| 一本综合久久| 中文国产成人精品| 欧美日本一道本在线视频| 欧美久久久久免费| 国产日韩在线视频| 久久99在线观看| 国产精品久久久久久福利一牛影视| 久久免费视频一区| 国产欧美精品在线| 亚洲欧美一区二区视频| 小辣椒精品导航| 国产精品女主播在线观看 | 亚洲综合成人在线| 午夜精品亚洲| 国产午夜精品麻豆| 久久精品国产一区二区电影| 久久精品人人| 激情一区二区三区| 免费一区二区三区| 亚洲精品久久久久久久久久久久| 亚洲精美视频| 欧美三级韩国三级日本三斤| 亚洲视频高清| 蜜臀av一级做a爰片久久| 亚洲精品久久7777| 欧美色123| 欧美一区二区三区在线视频| 老司机凹凸av亚洲导航| 亚洲精品国产日韩| 国产精品久久久久久户外露出| 欧美一区二区三区视频在线 | 欧美一区二区在线免费观看| 国产偷自视频区视频一区二区| 久久国产精品久久国产精品| 欧美成人精品在线| 黄页网站一区| 欧美日韩不卡合集视频| 亚洲一区二区三区四区在线观看| 久久久久久噜噜噜久久久精品| 亚洲大黄网站| 国产精品啊啊啊| 久久九九99| 一本色道久久综合亚洲精品婷婷 | 在线亚洲美日韩| 久久中文久久字幕| 在线一区二区三区四区五区| 国产日韩成人精品| 欧美经典一区二区三区| 欧美在线三级| 亚洲一区美女视频在线观看免费| 麻豆精品视频| 午夜精品久久| 99精品欧美| 狠狠色2019综合网| 欧美日韩一区二区免费视频| 欧美在线免费一级片| 99热在线精品观看| 亚洲国产日韩在线一区模特| 久久久久99| 亚洲欧美日韩综合一区| 亚洲精选在线观看| 亚洲国产91| 伊大人香蕉综合8在线视| 国产欧美三级| 国产精品久久一级|