本文整理汇总了C++中MemoryBuffer::Add方法的典型用法代码示例。如果您正苦于以下问题:C++ MemoryBuffer::Add方法的具体用法?C++ MemoryBuffer::Add怎么用?C++ MemoryBuffer::Add使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MemoryBuffer
的用法示例。
在下文中一共展示了MemoryBuffer::Add方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: while
int ehttp:: read_header( int fd, void *cookie, string &header, MemoryBuffer &message )
{
header="";
unsigned int offset=0;
int r = 0;
while((offset=header.find("\r\n\r\n"))==string::npos )
{
input_buffer[0]=0;
r=pRecv((void*)fd,&input_buffer[0],INPUT_BUFFER_SIZE,cookie);
if( r < 0 )
return EHTTP_ERR_GENERIC;
input_buffer[r]=0;
header+=input_buffer;
}
//message=header.substr(offset+4); // gotta have our shit globally i guess
// gotta calculate somehow =/ hmmmm cuz r isnt good enough since some might be leftover
// no cuz its teh offset in the full recieved header not our input buffer
// input buffer is oging to change right we are interested in the last chunk of it only ahh
DWORD inputPos = (offset + 4) % INPUT_BUFFER_SIZE;
message.Add(&input_buffer[inputPos], r - inputPos);
// then isntead of message add to our MemBuffer
// can't we take the message from parse_message, and add it to our buffer if len > 0?
// keep in mind that null will fuck us up =/ah so it would be pretty much this
// and message= would be adding to mem buffer instead
/* Fix the case where only "GET /xxxxx HTTP1.0\r\n\r\n" is sent (no other headers)*/
if(offset == header.find("\r\n"))
header=header.substr(0,offset+2);
else
header=header.substr(0,offset);
// DebugMsg( "HTTPServer-embed","Header:-->%s<--\r\n",header.c_str());
// DebugMsg( "HTTPServer-embed","Message:-->%s<--\r\n",message.c_str());
return EHTTP_ERR_OK;
}
示例2: DebugMsg
int ehttp:: parse_message( int fd, void *cookie, MemoryBuffer &message )
{
if( !contentlength ) return EHTTP_ERR_OK;
DebugMsg( "HTTPServer-embed","Parsed content length:%d\r\n",contentlength);
DebugMsg( "HTTPServer-embed","Actual message length read in:%d\r\n", message.GetDataLength());
unsigned int recieved = message.GetDataLength();
while( recieved < contentlength)
{
input_buffer[0]=0;
int r = recv((int)fd, input_buffer, INPUT_BUFFER_SIZE, 0);
if( r < 0 )
return EHTTP_ERR_GENERIC;
message.Add(input_buffer, r);
DebugMsg( "HTTPServer-embed", "Message Length: %d", r);
// Decrement our recieved content
recieved += r;
}
if(request_header["Content-Type"].find("multipart") == 0)
{
DebugMsg("HTTPServer-embed", "Parsing Multipart Upload");
if(parse_out_chunks(cookie, message, post_chunks) == EHTTP_ERR_OK) {
if(parse_out_entries(cookie, post_chunks) == EHTTP_ERR_OK) {
if(parse_out_entry_headers( cookie, post_chunks) == EHTTP_ERR_OK) {
DebugMsg("HTTPServer-embed", "Parsing Successful");
}
}
}
}
else
{
// Got here, good, we got the entire reported msg length
//DebugMsg( "HTTPServer-embed","Entire message is <%s>\r\n",message.c_str());
string test = (char*)message.GetData();
parse_out_pairs(cookie, test, post_parms);
}
return EHTTP_ERR_OK;
}
示例3: ConvertMemoryBufferToBMPBuffer
HRESULT ConvertMemoryBufferToBMPBuffer( MemoryBuffer &image_in, MemoryBuffer &image_out)
{
// Check to ensure that our data has a valid length before proceeding
if( image_in.GetDataLength() == 0 ) return S_FALSE;
// Set up a timer class to profile our code
ATG::Timer m_Timer;
double timeStart, timeStop;
// Begin Profiling our Texture Creation Code
timeStart = m_Timer.GetAbsoluteTime();
IDirect3DTexture9 * pTexture;
HRESULT retVal = D3DXCreateTextureFromFileInMemoryEx(
CFreestyleApp::getInstance().m_pd3dDevice,
image_in.GetData(),
image_in.GetDataLength(),
D3DX_DEFAULT_NONPOW2,
D3DX_DEFAULT_NONPOW2,
1,
D3DUSAGE_CPU_CACHED_MEMORY,
D3DFMT_LIN_A8R8G8B8,
D3DPOOL_DEFAULT,
D3DX_FILTER_NONE,
D3DX_FILTER_NONE,
0,
NULL,
NULL,
&pTexture
);
// End Profiling our Texture Creation Code
timeStop = m_Timer.GetAbsoluteTime();
DebugMsg("ConvertImageToBMP", "Texture Creation took %4.2f seconds to complete", (float)(timeStop - timeStart));
// If our texture was created successfully,
if(retVal = D3D_OK) {
//Begin Profiling our Data Manipulation Code
timeStart = m_Timer.GetAbsoluteTime();
// Get our level desc
D3DSURFACE_DESC desc;
pTexture->GetLevelDesc(0, &desc);
// Now lock our data
D3DLOCKED_RECT lock;
RECT rect = {0, 0, desc.Width, desc.Height};
pTexture->LockRect(0, &lock, &rect, D3DLOCK_READONLY);
//Read our data
DWORD headerSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
DWORD dataLen = lock.Pitch * desc.Height;
DWORD * dataBuffer = (DWORD*)malloc( dataLen + headerSize );
DWORD * address = (DWORD*)lock.pBits;
// Create file our header
BITMAPFILEHEADER* fHead = (BITMAPFILEHEADER*)dataBuffer;
fHead->bfType = 0x424D; // "BM"
fHead->bfSize = SwapDWORD(dataLen + headerSize);
fHead->bfReserved1 = 0;
fHead->bfReserved2 = 0;
fHead->bfOffBits = SwapDWORD(headerSize);
// Create our info header
BITMAPINFOHEADER* iHead = (BITMAPINFOHEADER*)(fHead + 1);
ZeroMemory(iHead, sizeof(BITMAPINFOHEADER));
iHead->biSize = SwapDWORD(sizeof(BITMAPINFOHEADER));
iHead->biWidth = SwapDWORD(desc.Width);
iHead->biHeight = SwapDWORD(desc.Height);
iHead->biPlanes = SwapWORD(1);
iHead->biBitCount = SwapWORD(32);
iHead->biSizeImage = SwapDWORD(dataLen);
// Copy over our raw (BGRA)
DWORD* rawPtr = (DWORD*)(iHead + 1);
for(int y = desc.Height - 1; y >= 0; y--) {
for(DWORD x = 0; x < desc.Width; x++) {
DWORD cp = (y * lock.Pitch) + (x * 4);
DWORD * temp = (DWORD*)(address + (cp / 4));
*rawPtr = SwapDWORD(*temp);
rawPtr++;
}
}
// Unlock our texture
pTexture->UnlockRect(0);
// End Profiling our Data Modification Code
timeStop = m_Timer.GetAbsoluteTime();
DebugMsg("ConvertImageToBMP", "Data Modification took %4.2f seconds to complete", (float)(timeStop - timeStart));
// Begin Profiling our Memory Copy Code
timeStart = m_Timer.GetAbsoluteTime();
// Copy our completed data to our new buffer
image_out.Add(dataBuffer, (headerSize + dataLen));
// End Profiling our Memory Copy Code
//.........这里部分代码省略.........