mirror of
https://github.com/janet-lang/janet
synced 2025-01-26 15:16:51 +00:00
Add array/trim and buffer/trim.
This commit is contained in:
parent
106437bd45
commit
79f5751375
@ -1,6 +1,10 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## Unreleased - ???
|
||||||
|
- Add `array/trim` and `buffer/trim` to shrink the backing capacity of these types
|
||||||
|
to their current length.
|
||||||
|
|
||||||
## 1.10.0 - 2020-06-14
|
## 1.10.0 - 2020-06-14
|
||||||
- Hardcode default jpm paths on install so env variables are needed in fewer cases.
|
- Hardcode default jpm paths on install so env variables are needed in fewer cases.
|
||||||
- Add `:no-compile` to `create-executable` option for jpm.
|
- Add `:no-compile` to `create-executable` option for jpm.
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
project('janet', 'c',
|
project('janet', 'c',
|
||||||
default_options : ['c_std=c99', 'b_lundef=false', 'default_library=both'],
|
default_options : ['c_std=c99', 'b_lundef=false', 'default_library=both'],
|
||||||
version : '1.10.0')
|
version : '1.10.1-dev')
|
||||||
|
|
||||||
# Global settings
|
# Global settings
|
||||||
janet_path = join_paths(get_option('prefix'), get_option('libdir'), 'janet')
|
janet_path = join_paths(get_option('prefix'), get_option('libdir'), 'janet')
|
||||||
|
@ -28,9 +28,9 @@
|
|||||||
|
|
||||||
#define JANET_VERSION_MAJOR 1
|
#define JANET_VERSION_MAJOR 1
|
||||||
#define JANET_VERSION_MINOR 10
|
#define JANET_VERSION_MINOR 10
|
||||||
#define JANET_VERSION_PATCH 0
|
#define JANET_VERSION_PATCH 1
|
||||||
#define JANET_VERSION_EXTRA ""
|
#define JANET_VERSION_EXTRA "-dev"
|
||||||
#define JANET_VERSION "1.10.0"
|
#define JANET_VERSION "1.10.1-dev"
|
||||||
|
|
||||||
/* #define JANET_BUILD "local" */
|
/* #define JANET_BUILD "local" */
|
||||||
|
|
||||||
|
@ -270,6 +270,26 @@ static Janet cfun_array_remove(int32_t argc, Janet *argv) {
|
|||||||
return argv[0];
|
return argv[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Janet cfun_array_trim(int32_t argc, Janet *argv) {
|
||||||
|
janet_fixarity(argc, 1);
|
||||||
|
JanetArray *array = janet_getarray(argv, 0);
|
||||||
|
if (array->count) {
|
||||||
|
if (array->count < array->capacity) {
|
||||||
|
Janet *newData = realloc(array->data, array->count * sizeof(Janet));
|
||||||
|
if (NULL == newData) {
|
||||||
|
JANET_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
array->data = newData;
|
||||||
|
array->capacity = array->count;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
array->capacity = 0;
|
||||||
|
free(array->data);
|
||||||
|
array->data = NULL;
|
||||||
|
}
|
||||||
|
return argv[0];
|
||||||
|
}
|
||||||
|
|
||||||
static const JanetReg array_cfuns[] = {
|
static const JanetReg array_cfuns[] = {
|
||||||
{
|
{
|
||||||
"array/new", cfun_array_new,
|
"array/new", cfun_array_new,
|
||||||
@ -345,6 +365,11 @@ static const JanetReg array_cfuns[] = {
|
|||||||
"By default, n is 1. "
|
"By default, n is 1. "
|
||||||
"Returns the array.")
|
"Returns the array.")
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"array/trim", cfun_array_trim,
|
||||||
|
JDOC("(array/trim arr)\n\n"
|
||||||
|
"Set the backing capacity of an array to its current length. Returns the modified array.")
|
||||||
|
},
|
||||||
{NULL, NULL, NULL}
|
{NULL, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -197,6 +197,26 @@ static Janet cfun_buffer_fill(int32_t argc, Janet *argv) {
|
|||||||
return argv[0];
|
return argv[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Janet cfun_buffer_trim(int32_t argc, Janet *argv) {
|
||||||
|
janet_fixarity(argc, 1);
|
||||||
|
JanetBuffer *buffer = janet_getbuffer(argv, 0);
|
||||||
|
if (buffer->count) {
|
||||||
|
if (buffer->count < buffer->capacity) {
|
||||||
|
uint8_t *newData = realloc(buffer->data, buffer->count);
|
||||||
|
if (NULL == newData) {
|
||||||
|
JANET_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
buffer->data = newData;
|
||||||
|
buffer->capacity = buffer->count;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
buffer->capacity = 0;
|
||||||
|
free(buffer->data);
|
||||||
|
buffer->data = NULL;
|
||||||
|
}
|
||||||
|
return argv[0];
|
||||||
|
}
|
||||||
|
|
||||||
static Janet cfun_buffer_u8(int32_t argc, Janet *argv) {
|
static Janet cfun_buffer_u8(int32_t argc, Janet *argv) {
|
||||||
int32_t i;
|
int32_t i;
|
||||||
janet_arity(argc, 1, -1);
|
janet_arity(argc, 1, -1);
|
||||||
@ -379,6 +399,12 @@ static const JanetReg buffer_cfuns[] = {
|
|||||||
"Fill up a buffer with bytes, defaulting to 0s. Does not change the buffer's length. "
|
"Fill up a buffer with bytes, defaulting to 0s. Does not change the buffer's length. "
|
||||||
"Returns the modified buffer.")
|
"Returns the modified buffer.")
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"buffer/trim", cfun_buffer_trim,
|
||||||
|
JDOC("(buffer/trim buffer)\n\n"
|
||||||
|
"Set the backing capacity of the buffer to the current length of the buffer. Returns the "
|
||||||
|
"modified buffer.")
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"buffer/push-byte", cfun_buffer_u8,
|
"buffer/push-byte", cfun_buffer_u8,
|
||||||
JDOC("(buffer/push-byte buffer x)\n\n"
|
JDOC("(buffer/push-byte buffer x)\n\n"
|
||||||
|
Loading…
Reference in New Issue
Block a user