Adding str::reserve
This commit is contained in:
committed by
Brian Anderson
parent
d3dfe8758d
commit
6be25c8a0c
@@ -97,6 +97,7 @@ export
|
||||
as_buf,
|
||||
//buf,
|
||||
sbuf,
|
||||
reserve,
|
||||
|
||||
unsafe;
|
||||
|
||||
@@ -105,6 +106,7 @@ export
|
||||
#[abi = "cdecl"]
|
||||
native mod rustrt {
|
||||
fn rust_str_push(&s: str, ch: u8);
|
||||
fn str_reserve_shared(&ss: str, nn: ctypes::size_t);
|
||||
}
|
||||
|
||||
// FIXME: add pure to a lot of functions
|
||||
@@ -755,6 +757,7 @@ Apply a function to each character
|
||||
*/
|
||||
fn map(ss: str, ff: fn(char) -> char) -> str {
|
||||
let result = "";
|
||||
reserve(result, byte_len(ss));
|
||||
|
||||
chars_iter(ss, {|cc|
|
||||
str::push_char(result, ff(cc));
|
||||
@@ -1302,6 +1305,13 @@ An unsafe buffer of bytes. Corresponds to a C char pointer.
|
||||
*/
|
||||
type sbuf = *u8;
|
||||
|
||||
// Function: reserve
|
||||
//
|
||||
// Allocate more memory for a string, up to `nn` + 1 bytes
|
||||
fn reserve(&ss: str, nn: uint) {
|
||||
rustrt::str_reserve_shared(ss, nn);
|
||||
}
|
||||
|
||||
// Module: unsafe
|
||||
//
|
||||
// These functions may create invalid UTF-8 strings and eat your baby.
|
||||
|
||||
@@ -105,6 +105,13 @@ vec_reserve_shared(type_desc* ty, rust_vec** vp,
|
||||
reserve_vec_exact(task, vp, n_elts * ty->size);
|
||||
}
|
||||
|
||||
extern "C" CDECL void
|
||||
str_reserve_shared(rust_vec** sp,
|
||||
size_t n_elts) {
|
||||
rust_task *task = rust_task_thread::get_task();
|
||||
reserve_vec_exact(task, sp, n_elts + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies elements in an unsafe buffer to the given interior vector. The
|
||||
* vector must have size zero.
|
||||
|
||||
@@ -50,6 +50,7 @@ shape_log_str
|
||||
squareroot
|
||||
start_task
|
||||
vec_reserve_shared
|
||||
str_reserve_shared
|
||||
vec_from_buf_shared
|
||||
unsupervise
|
||||
upcall_cmp_type
|
||||
|
||||
Reference in New Issue
Block a user