亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xbytebuffer.cpp

?? BCB的學習資料
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
//---------------------------------------------------------------------------


#pragma hdrstop

#include "XByteBuffer.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)
namespace zdhsoft
{
/*
////////////////////////////////////////////////////////////////////////////////
[Name]XByteBuffer
[Title]XByteBuffer的構造函數
////////////////////////////////////////////////////////////////////////////////
[Param]
    <int default=XBYTE_BUFFER_MIN_BLOCK>iPrepareLength 初始要準備的空間
[Exception]
    EOutOfMemory 如果申請內存,則拋出該異常
[Description]
    構造函數,需要指定準備分配的空間的大小,默認為XBYTE_BUFFER_MIN_BLOCK
[Version]1.0
[Author]Rex Winter
[Date]2005-6-18
////////////////////////////////////////////////////////////////////////////////
*/
XByteBuffer::XByteBuffer(int iPrepareLength)
    :m_DataSize(0),
     m_Length(0),
     m_Data(NULL)
{
    iPrepareLength = PrepareLength(iPrepareLength);
    m_Data = new XByte[iPrepareLength];
    if( m_Data == NULL ) throw EOutOfMemory(EXCEPTION_OUT_OF_MEMORY);
    m_DataSize = iPrepareLength;
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]XByteBuffer
[Title]XByteBuffer的構造函數
////////////////////////////////////////////////////////////////////////////////
[Param]
    <void *>aData 要被復制的數據
    <int> aDataSize 要被復制的數據的字節數
    <int default=XBYTE_BUFFER_MIN_BLOCK>iPrepareLength 初始要準備的空間
[Exception]
    EOutOfMemory 如果申請內存,則拋出該異常
[Description]
    構造函數,需要指定準備分配的空間的大小,默認為XBYTE_BUFFER_MIN_BLOCK
[Version]1.0
[Author]Rex Winter
[Date]2005-6-18
////////////////////////////////////////////////////////////////////////////////
*/
XByteBuffer::XByteBuffer(void * aData,int aDataSize,int iPrepareLength)
    :m_DataSize(0),
     m_Length(0),
     m_Data(NULL)
{
    iPrepareLength = PrepareLength( (iPrepareLength>aDataSize)?iPrepareLength:aDataSize );
    m_Data = new XByte[iPrepareLength];
    if( m_Data == NULL ) throw EOutOfMemory(EXCEPTION_OUT_OF_MEMORY);
    m_DataSize = iPrepareLength;
    if( aDataSize > 0 )
    {
        memcpy(m_Data,aData, aDataSize);
        m_Length = aDataSize;
    }
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]XByteBuffer
[Title]XByteBuffer的拷貝構造函數
////////////////////////////////////////////////////////////////////////////////
[Param]
    <const XByteBuffer &>aBuffer 被復制的對象
[Exception]
    EOutOfMemory 如果申請內存,則拋出該異常
[Description]
    拷貝構造函數,分配的空間是實際需要的最小空間。
[Version]1.0
[Author]Rex Winter
[Date]2005-6-18
////////////////////////////////////////////////////////////////////////////////
*/
XByteBuffer::XByteBuffer(const XByteBuffer & aBuffer)
    :m_DataSize(0),
     m_Length(aBuffer.m_Length),
     m_Data(NULL)
{
    int iPrepareLength = PrepareLength(m_Length);
    m_Data = new XByte[iPrepareLength];
    if( m_Data == NULL ) throw EOutOfMemory(EXCEPTION_OUT_OF_MEMORY);
    m_DataSize = iPrepareLength;
    memcpy(m_Data,aBuffer.m_Data,m_Length);
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]XByteBuffer
[Title]XByteBuffer的析構函數
////////////////////////////////////////////////////////////////////////////////
[Param]
[Exception]
[Description]
    析構函數
[Version]1.0
[Author]Rex Winter
[Date]2005-6-18
////////////////////////////////////////////////////////////////////////////////
*/
XByteBuffer::~XByteBuffer()
{
    if( m_Data != NULL ) delete[] m_Data;
}

/*
////////////////////////////////////////////////////////////////////////////////
[Name]operator[]
[Title]下標操作符
////////////////////////////////////////////////////////////////////////////////
[Param]
    <int> Index 下標值
[Return]
    <XByte &>返回XByte類型的引用
[Exception]
    XExceptionArrayOutOfRange 如果下標越界,則拋出該異常
[Description]
    下標操作符
[Version]1.0
[Author]Rex Winter
[Date]2005-6-21
////////////////////////////////////////////////////////////////////////////////
*/
XByte & XByteBuffer::operator[](int Index)
{
    if( Index<0 || Index >= m_Length ) throw XExceptionArrayOutOfRange(Index, m_Length);
    return m_Data[Index];
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]operator[]
[Title]下標操作符
////////////////////////////////////////////////////////////////////////////////
[Param]
    <int> Index 下標值
[Return]
    <const XByte &>返回XByte類型的引用
[Exception]
    XExceptionArrayOutOfRange 如果下標越界,則拋出該異常
[Description]
    下標操作符
[Version]1.0
[Author]Rex Winter
[Date]2005-6-21
////////////////////////////////////////////////////////////////////////////////
*/
const XByte & XByteBuffer::operator[] (int Index) const
{
    if( Index<0 || Index >= m_Length ) throw XExceptionArrayOutOfRange(Index, m_Length);
    return m_Data[Index];
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]expandCapacity
[Title]擴充緩沖區容量
////////////////////////////////////////////////////////////////////////////////
[Param]
    <int> minimumCapacity 最小所需的容量
    <bool default = true> 是否要copy原數據,true表示Copy原數據,false表示不再copy
[Return]
    void
[Exception]
    EOutOfMemory 如果申請緩沖區失敗,那么則拋出該異常
[Description]
    擴充緩沖區容量,如果擴充前的數據是有用的,那么這些數據在擴充容量后Copy到新緩沖區中
[Version]1.0
[Author]Rex Winter
[Date]2005-6-21
////////////////////////////////////////////////////////////////////////////////
*/
void XByteBuffer::expandCapacity(int minimumCapacity,bool bCopyData)
{
    int newCapacity = m_DataSize * 2;
    if (newCapacity < 0)  newCapacity = 0x7fffff;//最大32位正整數
    else if (minimumCapacity > newCapacity) newCapacity = minimumCapacity;
    int iPrepareLength = PrepareLength(newCapacity);
    XByte * tmp = new XByte[iPrepareLength];
    if( tmp == NULL ) throw EOutOfMemory(EXCEPTION_OUT_OF_MEMORY);
    if( bCopyData )
    {
        if( m_Length > 0 ) memcpy(tmp, m_Data, m_Length);
    }
    else
    {
        m_Length = 0;
    }
    delete[] m_Data;
    m_DataSize = iPrepareLength;
    m_Data = tmp;
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]operaotr=
[Title]緩沖區對象的賦值運算符
////////////////////////////////////////////////////////////////////////////////
[Param]
    <const XByteBuffer &> aBuffer 賦值的目標緩沖區
[Return]
    XByteBuffer & 當前對象的引用
[Exception]
    EOutOfMemory 如果申請緩沖區失敗,那么則拋出該異常
[Description]
    重載賦值操作,避免編譯器產生一個缺省的
[Version]1.0
[Author]Rex Winter
[Date]2005-6-21
////////////////////////////////////////////////////////////////////////////////
*/

XByteBuffer & XByteBuffer::operator=(const XByteBuffer & aBuffer)
{
    if(this == &aBuffer) return * this;
    if( aBuffer.m_Length > m_DataSize )
    {
        expandCapacity( aBuffer.m_Length ,false); //因為原有的數據全不要了,所以重新分配內存的時候,不需要再copy
    }
    memcpy(m_Data,aBuffer.m_Data,aBuffer.m_Length);
    m_Length = aBuffer.m_Length;
    return *this;
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]Clear
[Title]清空緩沖區的數據
////////////////////////////////////////////////////////////////////////////////
[Param]
    <bool default = false> bFree 釋放現有緩沖區標志,如果為true表示釋放當前的緩沖區,否則不釋放
[Return]
    void
[Exception]
    EOutOfMemory 如果申請緩沖區失敗,那么則拋出該異常
[Description]
    清空緩沖區的數據,如果bFree為true表示釋放當前緩沖區,并重新申請一塊緩沖區
[Version]1.0
[Author]Rex Winter
[Date]2005-6-21
////////////////////////////////////////////////////////////////////////////////
*/
void XByteBuffer::Clear(bool bFree)
{
    if(bFree)
    {
        if( m_DataSize != XBYTE_BUFFER_MIN_BLOCK )
        {
            delete[] m_Data;
            m_Data = new XByte[XBYTE_BUFFER_MIN_BLOCK];
            if( m_Data == NULL ) throw EOutOfMemory(EXCEPTION_OUT_OF_MEMORY);
            m_DataSize = XBYTE_BUFFER_MIN_BLOCK;
        }
    }
    m_Length = 0;
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]Append...Array
[Title]向緩沖區中追加一個數組的元素
////////////////////////////////////////////////////////////////////////////////
[Param]
    <const XArray<...>&  > aArray 被追加的數組
    或者是
    <const XDynamicArray<...>& > aArray被追回的數組
[Return]
    <XByteBuffer &>返回當前緩沖區的引用
[Exception]
    EOutOfMemory 如果申請緩沖區失敗,那么則拋出該異常
[Description]
    向緩沖區中追加一個數組的元素,這些方法包括
    AppendByteArray,AppendCharArray ...等一組這樣的方法
[Version]1.0
[Author]Rex Winter
[Date]2005-6-21
////////////////////////////////////////////////////////////////////////////////
*/

XByteBuffer & XByteBuffer::AppendByteArray(const XArray<XByte> &aByteArray)
{
    int ArrayLength = aByteArray.GetLength();
    if( ArrayLength > 0 )
    {
        ensureCapacity( m_Length + ArrayLength );
        XByte * dest = m_Data + m_Length;
        const XByte * src = aByteArray.Data();
        for(int i=0; i<ArrayLength; i++) *dest++ = *src++;
//這段匯編等同于上同的for,為了移植性,就不采用匯編了
//        asm
//        {
//            mov ecx, ArrayLength
//            mov ebx, src
//            mov edx, dest
//
//            @NEXT_COPY:
//            cmp ecx,0
//            jz  near @COPY_OK
//            mov al,byte ptr [ebx]
//            mov byte ptr [edx],al
//            inc ebx
//            inc edx
//            dec ecx
//            jmp near @NEXT_COPY
//
//            @COPY_OK:
//        }
        m_Length += ArrayLength;
    }
    return *this;
}
XByteBuffer & XByteBuffer::AppendCharArray(const XArray<XChar> &aCharArray)
{
    int ArrayLength = aCharArray.GetLength();
    if( ArrayLength > 0 )
    {
        ensureCapacity( m_Length + ArrayLength );
        XByte * dest = m_Data + m_Length;
        const XByte * src = (const XByte *)aCharArray.Data();

        for(int i=0; i<ArrayLength; i++) *dest++ = *src++;

        m_Length += ArrayLength;
    }
    return *this;

}
XByteBuffer & XByteBuffer::AppendBoolArray(const XArray<XBoolean> &aBoolArray)
{
    int ArrayLength = aBoolArray.GetLength();
    if( ArrayLength > 0 )
    {
        ensureCapacity( m_Length + ArrayLength );
        XByte * dest = m_Data + m_Length;
        const XBoolean * src = aBoolArray.Data();

        for(int i=0; i<ArrayLength; i++)
        {
            if( *src ) *dest++ = 1;
            else *dest++ = 0;
            src++;
        }
        m_Length += ArrayLength;
    }
    return *this;
}
XByteBuffer & XByteBuffer::AppendBuffer(const XByteBuffer & aBuffer)
{
    int ArrayLength = aBuffer.GetLength();
    if( ArrayLength > 0 )
    {
        ensureCapacity( m_Length + ArrayLength );
        XByte * dest = m_Data + m_Length;
        const XByte * src = aBuffer.m_Data;
        for(int i=0; i<ArrayLength; i++) *dest++ = *src++;
        m_Length += ArrayLength;
    }
    return *this;
}
XByteBuffer & XByteBuffer::AppendShortArray(const XArray<XShort> &aShortArray)
{
    int ArrayLength = aShortArray.GetLength();
    if( ArrayLength > 0 )
    {
        ensureCapacity( m_Length + ArrayLength * 2 );
        XByte * dest = m_Data + m_Length;
        const XByte * src = (const XByte *)aShortArray.Data();
        for(int i=0; i<ArrayLength; i++)
        {
            *dest++= *(src+1);
            *dest++ = *src++;
            src++;
        }
        m_Length += ArrayLength * 2;
    }
    return *this;
}
XByteBuffer & XByteBuffer::AppendWordArray(const XArray<XWord> &aWordArray)
{
    int ArrayLength = aWordArray.GetLength();
    if( ArrayLength > 0 )
    {
        ensureCapacity( m_Length + ArrayLength * 2 );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品嫩草99a| 天天色综合天天| 亚洲一区二区三区在线看| 国产精品久久久久三级| 成人中文字幕在线| 一区二区三区视频在线观看 | 国产清纯白嫩初高生在线观看91 | 国产日韩综合av| 日韩黄色免费网站| 日韩精品中文字幕在线不卡尤物| 日韩中文字幕1| 日韩午夜中文字幕| 91麻豆精品视频| 亚洲激情男女视频| 免费看欧美女人艹b| 国产一区二区美女诱惑| www.66久久| 日本不卡不码高清免费观看| 麻豆精品一区二区三区| 欧美丰满一区二区免费视频 | 久久九九国产精品| 欧美色涩在线第一页| 亚瑟在线精品视频| 欧美成人艳星乳罩| av亚洲精华国产精华精| 玉足女爽爽91| 日韩一级免费观看| 成人高清视频在线| 亚洲成a人v欧美综合天堂 | 久久草av在线| 国产精品视频在线看| 欧美影视一区二区三区| 久久久久久久久免费| 国内精品久久久久影院一蜜桃| 国产精品天天摸av网| 日本vs亚洲vs韩国一区三区| 精品中文av资源站在线观看| 久久99精品久久久久久| 成人免费高清视频在线观看| 欧美日韩综合在线免费观看| 亚洲精品伦理在线| 91福利精品视频| 国产综合成人久久大片91| 91精品国产综合久久久蜜臀粉嫩 | 美女视频网站久久| 一区二区在线观看视频| 国产亚洲欧洲997久久综合| 欧美一区二区三区系列电影| 91精品免费在线| 在线不卡中文字幕| 日本久久精品电影| 亚洲国产美女搞黄色| 91年精品国产| 久久不见久久见免费视频1| 日韩免费高清电影| 国产不卡在线视频| 亚洲欧美一区二区三区国产精品 | 日本在线不卡一区| 欧美成人video| 成人免费毛片片v| 亚洲精品美国一| 日韩一二在线观看| 91搞黄在线观看| 国产mv日韩mv欧美| 色婷婷久久一区二区三区麻豆| 欧美吞精做爰啪啪高潮| 亚洲欧美影音先锋| 欧美丝袜丝交足nylons| 国产精品主播直播| 六月丁香婷婷久久| 亚洲成人三级小说| 一区二区三区中文字幕电影| 国产精品拍天天在线| 久久综合久久99| 日韩视频永久免费| 欧美日韩一二区| 色婷婷综合久久| 99久久婷婷国产综合精品| 国产成人综合自拍| 国产精品一区在线观看你懂的| 日韩国产一区二| 天堂午夜影视日韩欧美一区二区| 综合网在线视频| 亚洲丝袜精品丝袜在线| 国产精品无码永久免费888| 日本一区二区成人| 国产精品久久久久影院色老大| 日韩免费高清电影| 久久久综合视频| 久久精品日韩一区二区三区| 精品日韩一区二区三区免费视频| 日韩一级欧美一级| 精品电影一区二区| 久久无码av三级| 久久九九99视频| 中文字幕中文乱码欧美一区二区| 国产精品短视频| 一区二区三区精品| 五月婷婷欧美视频| 蜜臀va亚洲va欧美va天堂| 极品美女销魂一区二区三区| 国产综合久久久久久鬼色| 成人永久看片免费视频天堂| 91丝袜美女网| 日本韩国欧美三级| 欧美日韩高清影院| 精品国产一区二区三区忘忧草 | 日本黄色一区二区| 欧美高清你懂得| 精品国产亚洲一区二区三区在线观看| 久久免费精品国产久精品久久久久| 久久精品在线免费观看| 亚洲欧美一区二区三区国产精品| 亚洲成a人v欧美综合天堂| 黄页网站大全一区二区| 成人黄色片在线观看| 欧美又粗又大又爽| 欧美成人a视频| 1024成人网色www| 日本人妖一区二区| 成人午夜视频免费看| 欧美图片一区二区三区| 精品国产乱码久久久久久牛牛 | 麻豆精品新av中文字幕| 国产成人av一区二区三区在线观看| 91日韩一区二区三区| 日韩女优制服丝袜电影| 亚洲欧洲日韩在线| 久久成人18免费观看| 91免费国产视频网站| 欧美成人猛片aaaaaaa| 综合激情网...| 韩日av一区二区| 欧美日韩精品是欧美日韩精品| 久久精品人人做| 午夜久久久久久久久久一区二区| 国产成人精品免费| 日韩欧美卡一卡二| 一区二区高清在线| 成人影视亚洲图片在线| 884aa四虎影成人精品一区| 国产精品久久久久久久蜜臀| 美女一区二区在线观看| 在线影视一区二区三区| 日本一区二区成人在线| 青青草原综合久久大伊人精品优势| 成人av电影免费在线播放| 日韩欧美aaaaaa| 日本免费新一区视频| 欧美午夜一区二区| 亚洲男人天堂一区| 成人av电影在线网| 国产欧美日韩久久| 国产精品99久久久| 精品国产91乱码一区二区三区 | 亚洲va在线va天堂| 日本国产一区二区| 国产精品久久久久久久午夜片| 国产伦精品一区二区三区视频青涩 | 国产精品亚洲人在线观看| 制服丝袜国产精品| 亚洲一区二区影院| 91麻豆国产精品久久| 国产精品美女一区二区在线观看| 精东粉嫩av免费一区二区三区| 91精品国产手机| 亚洲国产日韩精品| 欧美性三三影院| 亚洲永久免费av| 色噜噜夜夜夜综合网| 亚洲蜜桃精久久久久久久| 99久久久久久| 综合亚洲深深色噜噜狠狠网站| av在线不卡电影| 国产精品国产三级国产三级人妇| 粉嫩av一区二区三区| 欧美精彩视频一区二区三区| 国产91精品入口| 亚洲欧美色一区| 欧美在线free| 日韩高清在线不卡| 欧美一区二区三区视频在线| 日本中文字幕不卡| 久久亚洲精品国产精品紫薇| 国产精品系列在线观看| 国产欧美日韩亚州综合| 91女神在线视频| 午夜精品国产更新| 欧美一级二级在线观看| 国产一区二三区好的| 欧美韩日一区二区三区| 91麻豆swag| 婷婷久久综合九色国产成人| 91精品国产欧美日韩| 国产一区二区女| 亚洲人123区| 欧美一卡二卡在线| 国产麻豆精品视频| 亚洲欧美激情小说另类| 欧美军同video69gay|