-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathbuffer.h
131 lines (109 loc) · 2.38 KB
/
buffer.h
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
//**********************************************************************
// File: buffer.h
//
// Custom Buffer-Manipulation Routines
//
// By RaMMicHaeL, 12.10.2009
//**********************************************************************
#ifndef _BUFFER_H_
#define _BUFFER_H_
#ifdef FillMemory
#undef FillMemory
#endif
#ifdef ZeroMemory
#undef ZeroMemory
#endif
#ifdef CopyMemory
#undef CopyMemory
#endif
#ifdef MoveMemory
#undef MoveMemory
#endif
__forceinline
void FillMemory(PVOID Destination, SIZE_T Length, BYTE Fill)
{
SIZE_T *sizet_p;
unsigned char *uchar_p;
SIZE_T sizet_fill;
SIZE_T count;
sizet_p = (SIZE_T *)Destination;
count = Length/sizeof(SIZE_T);
if(count)
{
sizet_fill = Fill;
sizet_fill |= sizet_fill << 8;
sizet_fill |= sizet_fill << 16;
#ifdef _WIN64
sizet_fill |= sizet_fill << 32;
#endif
do
*(sizet_p++) = sizet_fill;
while(--count);
}
uchar_p = (unsigned char *)sizet_p;
count = Length & (sizeof(SIZE_T)-1);
if(count)
{
do
*(uchar_p++) = Fill;
while(--count);
}
}
#define ZeroMemory(Destination, Length) FillMemory(Destination, Length, 0)
__forceinline
void CopyMemory(PVOID Destination, const VOID *Source, SIZE_T Length)
{
SIZE_T *sizet_p_dest, *sizet_p_src;
unsigned char *uchar_p_dest, *uchar_p_src;
SIZE_T count;
sizet_p_dest = (SIZE_T *)Destination;
sizet_p_src = (SIZE_T *)Source;
count = Length/sizeof(SIZE_T);
if(count)
{
do
*(sizet_p_dest++) = *(sizet_p_src++);
while(--count);
}
uchar_p_dest = (unsigned char *)sizet_p_dest;
uchar_p_src = (unsigned char *)sizet_p_src;
count = Length & (sizeof(SIZE_T)-1);
if(count)
{
do
*(uchar_p_dest++) = *(uchar_p_src++);
while(--count);
}
}
__forceinline
void MoveMemory(PVOID Destination, const VOID *Source, SIZE_T Length)
{
SIZE_T *sizet_p_dest, *sizet_p_src;
unsigned char *uchar_p_dest, *uchar_p_src;
SIZE_T count;
if(Destination > Source)
{
// Copy in reverse
uchar_p_dest = (unsigned char *)Destination+Length;
uchar_p_src = (unsigned char *)Source+Length;
count = Length & (sizeof(SIZE_T)-1);
if(count)
{
do
*(--uchar_p_dest) = *(--uchar_p_src);
while(--count);
}
sizet_p_dest = (SIZE_T *)uchar_p_dest;
sizet_p_src = (SIZE_T *)uchar_p_src;
count = Length/sizeof(SIZE_T);
if(count)
{
do
*(--sizet_p_dest) = *(--sizet_p_src);
while(--count);
}
}
else
CopyMemory(Destination, Source, Length);
}
#endif // _BUFFER_H_