-
Notifications
You must be signed in to change notification settings - Fork 169
/
Copy pathnjs_array_buffer.h
49 lines (32 loc) · 1.29 KB
/
njs_array_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
/*
* Copyright (C) Igor Sysoev
* Copyright (C) NGINX, Inc.
*/
#ifndef _NJS_ARRAY_BUFFER_H_INCLUDED_
#define _NJS_ARRAY_BUFFER_H_INCLUDED_
#define njs_array_buffer_size(buffer) \
((buffer)->size)
njs_array_buffer_t *njs_array_buffer_alloc(njs_vm_t *vm, uint64_t size,
njs_bool_t zeroing);
njs_int_t njs_array_buffer_writable(njs_vm_t *vm, njs_array_buffer_t *buffer);
NJS_EXPORT njs_int_t njs_array_buffer_detach(njs_vm_t *vm, njs_value_t *args,
njs_uint_t nargs, njs_index_t unused, njs_value_t *retval);
njs_inline njs_array_buffer_t *
njs_array_buffer_slice(njs_vm_t *vm, njs_array_buffer_t *this, int64_t start,
int64_t end)
{
int64_t len, new_len, first, final;
njs_array_buffer_t *new_buffer;
len = njs_array_buffer_size(this);
first = (start < 0) ? njs_max(len + start, 0) : njs_min(start, len);
final = (end < 0) ? njs_max(len + end, 0) : njs_min(end, len);
new_len = njs_max(final - first, 0);
new_buffer = njs_array_buffer_alloc(vm, new_len, 1);
if (new_buffer == NULL) {
return NULL;
}
memcpy(new_buffer->u.u8, &this->u.u8[first], new_len);
return new_buffer;
}
extern const njs_object_type_init_t njs_array_buffer_type_init;
#endif /* _NJS_ARRAY_BUFFER_H_INCLUDED_ */