-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMemoryStream.cpp
More file actions
57 lines (50 loc) · 1.19 KB
/
Copy pathMemoryStream.cpp
File metadata and controls
57 lines (50 loc) · 1.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Copyright © 2014 CCP ehf.
#include "StdAfx.h"
#include "MemoryStream.h"
MemoryStream::MemoryStream( const void* memory, size_t size )
:m_memory( memory ),
m_size( size ),
m_position( 0 )
{
}
ptrdiff_t MemoryStream::Read( void* dest, ptrdiff_t count )
{
if( count < 0 )
{
count = m_size - m_position;
}
count = std::min( count, ptrdiff_t( m_size - m_position ) );
memcpy( dest, static_cast<const uint8_t*>( m_memory ) + m_position, count );
m_position += count;
return count;
}
ptrdiff_t MemoryStream::Write( const void* source, size_t count )
{
return -1;
}
ptrdiff_t MemoryStream::Seek( ptrdiff_t distance, SeekOrigin method )
{
switch( method )
{
case SO_BEGIN:
m_position = size_t( std::min( ptrdiff_t( m_size ), std::max( distance, ptrdiff_t( 0 ) ) ) );
break;
case SO_CURRENT:
m_position = std::min( size_t( std::max( ptrdiff_t( m_position ) + distance, ptrdiff_t( 0 ) ) ), m_size );
break;
case SO_END:
m_position = m_size - std::min( size_t( std::max( distance, ptrdiff_t( 0 ) ) ), m_size );
break;
default:
return -1;
}
return GetPosition();
}
ptrdiff_t MemoryStream::GetPosition()
{
return m_position;
}
ptrdiff_t MemoryStream::GetSize()
{
return m_size;
}