FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cpython/Modules/_zstd/buffer.h at main · python/cpython · GitHub
python
cpython
Repository navigation
Code
Issues
5k+
(5k+)
Pull requests
2.8k
(2.8k)
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cpython
/
Modules
/
_zstd
/
buffer.h
Copy path
More file actions
More file actions
Latest commit
History
History
History
108 lines (92 loc) · 2.8 KB
Breadcrumbs
cpython
/
Modules
/
_zstd
/
buffer.h
Copy path
File metadata and controls
108 lines (92 loc) · 2.8 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
/* Low level interface to the Zstandard algorithm & the zstd library. */
#ifndef
ZSTD_BUFFER_H
#define
ZSTD_BUFFER_H
#include
"pycore_blocks_output_buffer.h"
#include
<zstd.h>
// ZSTD_outBuffer
/* Blocks output buffer wrapper code */
/* Initialize the buffer, and grow the buffer.
Return 0 on success
Return -1 on failure */
static
inline
int
_OutputBuffer_InitAndGrow
(
_BlocksOutputBuffer
*
buffer
,
ZSTD_outBuffer
*
ob
,
Py_ssize_t
max_length
)
{
/* Ensure .writer was set to NULL */
assert
(
buffer
->
writer
==
NULL
);
Py_ssize_t
res
=
_BlocksOutputBuffer_InitAndGrow
(
buffer
,
max_length
,
&
ob
->
dst
);
if
(
res
<
0
) {
return
-1
;
}
ob
->
size
=
(
size_t
)
res
;
ob
->
pos
=
0
;
return
0
;
}
/* Initialize the buffer, with an initial size.
init_size: the initial size.
Return 0 on success
Return -1 on failure */
static
inline
int
_OutputBuffer_InitWithSize
(
_BlocksOutputBuffer
*
buffer
,
ZSTD_outBuffer
*
ob
,
Py_ssize_t
max_length
,
Py_ssize_t
init_size
)
{
Py_ssize_t
block_size
;
/* Ensure .writer was set to NULL */
assert
(
buffer
->
writer
==
NULL
);
/* Get block size */
if
(
0
<=
max_length
&&
max_length
<
init_size
) {
block_size
=
max_length
;
}
else
{
block_size
=
init_size
;
}
Py_ssize_t
res
=
_BlocksOutputBuffer_InitWithSize
(
buffer
,
block_size
,
&
ob
->
dst
);
if
(
res
<
0
) {
return
-1
;
}
// Set max_length, InitWithSize doesn't do this
buffer
->
max_length
=
max_length
;
ob
->
size
=
(
size_t
)
res
;
ob
->
pos
=
0
;
return
0
;
}
/* Grow the buffer.
Return 0 on success
Return -1 on failure */
static
inline
int
_OutputBuffer_Grow
(
_BlocksOutputBuffer
*
buffer
,
ZSTD_outBuffer
*
ob
)
{
assert
(
ob
->
pos
==
ob
->
size
);
Py_ssize_t
res
=
_BlocksOutputBuffer_Grow
(
buffer
,
&
ob
->
dst
,
0
);
if
(
res
<
0
) {
return
-1
;
}
ob
->
size
=
(
size_t
)
res
;
ob
->
pos
=
0
;
return
0
;
}
/* Finish the buffer.
Return a bytes object on success
Return NULL on failure */
static
inline
PyObject
*
_OutputBuffer_Finish
(
_BlocksOutputBuffer
*
buffer
,
ZSTD_outBuffer
*
ob
)
{
return
_BlocksOutputBuffer_Finish
(
buffer
,
ob
->
size
-
ob
->
pos
);
}
/* Clean up the buffer */
static
inline
void
_OutputBuffer_OnError
(
_BlocksOutputBuffer
*
buffer
)
{
_BlocksOutputBuffer_OnError
(
buffer
);
}
/* Whether the output data has reached max_length.
The avail_out must be 0, please check it before calling. */
static
inline
int
_OutputBuffer_ReachedMaxLength
(
_BlocksOutputBuffer
*
buffer
,
ZSTD_outBuffer
*
ob
)
{
/* Ensure (data size == allocated size) */
assert
(
ob
->
pos
==
ob
->
size
);
return
buffer
->
allocated
==
buffer
->
max_length
;
}
#endif
// !ZSTD_BUFFER_H
Back
|
FazBrowse Home
|
New Git URL