Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1992.
//
// File: MemSer.cxx
//
// History: 29-Jul-94 KyleP Created
//
//--------------------------------------------------------------------------
#include <pch.cxx>
#pragma hdrstop
#include <qmemser.hxx>
CQMemSerStream::CQMemSerStream( unsigned cb ) : _cb( cb ) { _pb = (BYTE *) GlobalAlloc( GPTR | GMEM_DDESHARE, cb );
if ( _pb == 0 ) THROW ( CException( E_OUTOFMEMORY ) );
_pbCurrent = _pb; }
CQMemSerStream::CQMemSerStream( BYTE * pb ) : _cb( 0 ), _pb( pb ), _pbCurrent( _pb ) { }
CQMemSerStream::~CQMemSerStream() { if ( _cb > 0 ) GlobalFree( _pb ); }
BYTE *CQMemSerStream::AcqBuf() { BYTE *pTmp = _pb; _pb = 0; _cb = 0; return (pTmp) ; }
void CQMemSerStream::PutByte( BYTE b ) { *_pbCurrent = b; _pbCurrent += 1; }
void CQMemSerStream::PutChar( char const * pc, ULONG cc ) { memcpy( _pbCurrent, pc, cc ); _pbCurrent += cc; }
void CQMemSerStream::PutWChar( WCHAR const * pwc, ULONG cc ) { WCHAR * pwcTemp = AlignWCHAR(_pbCurrent); memcpy( pwcTemp, pwc, cc * sizeof(WCHAR) );
_pbCurrent = (BYTE *)(pwcTemp + cc); }
void CQMemSerStream::PutUShort( USHORT us ) { USHORT * pus = AlignUSHORT(_pbCurrent); *pus = us; _pbCurrent = (BYTE *)(pus + 1); }
void CQMemSerStream::PutULong( ULONG ul ) { ULONG * pul = AlignULONG(_pbCurrent); *pul = ul; _pbCurrent = (BYTE *)(pul + 1); }
void CQMemSerStream::PutLong( long l ) { long * pl = AlignLong(_pbCurrent); *pl = l; _pbCurrent = (BYTE *)(pl + 1); }
void CQMemSerStream::PutFloat( float f ) { float * pf = AlignFloat(_pbCurrent); *pf = f; _pbCurrent = (BYTE *)(pf + 1); }
void CQMemSerStream::PutDouble( double d ) { double * pd = AlignDouble(_pbCurrent); *pd = d; _pbCurrent = (BYTE *)(pd + 1); }
void CQMemSerStream::PutString( char const * psz ) { ULONG len = strlen(psz); ULONG * pul = AlignULONG(_pbCurrent); *pul = len; _pbCurrent = (BYTE *)(pul + 1); memcpy(_pbCurrent, psz, len); _pbCurrent += len; }
void CQMemSerStream::PutWString( WCHAR const * pwsz ) { ULONG len = wcslen(pwsz); ULONG * pul = AlignULONG(_pbCurrent); *pul = len; len *= sizeof(WCHAR); _pbCurrent = (BYTE *)(pul + 1); memcpy(_pbCurrent, pwsz, len ); _pbCurrent += len; }
void CQMemSerStream::PutBlob( BYTE const * pb, ULONG cb ) { memcpy( _pbCurrent, pb, cb ); _pbCurrent += cb; }
void CQMemSerStream::PutGUID( GUID const & guid ) { GUID * pguid = (GUID *)AlignGUID(_pbCurrent); memcpy( pguid, &guid, sizeof(guid) ); _pbCurrent = (BYTE *)(pguid + 1); }
|