mirror of
https://github.com/c-cube/tiny_httpd.git
synced 2025-12-07 11:45:36 -05:00
buf: add add_char
This commit is contained in:
parent
3280c9422f
commit
db40e291ab
2 changed files with 23 additions and 6 deletions
|
|
@ -1,12 +1,19 @@
|
||||||
type t = { mutable bytes: bytes; mutable i: int }
|
type t = { mutable bytes: bytes; mutable i: int; original: bytes }
|
||||||
|
|
||||||
let create ?(size = 4_096) () : t = { bytes = Bytes.make size ' '; i = 0 }
|
let create ?(size = 4_096) () : t =
|
||||||
let size self = self.i
|
let bytes = Bytes.make size ' ' in
|
||||||
let bytes_slice self = self.bytes
|
{ bytes; i = 0; original = bytes }
|
||||||
|
|
||||||
|
let[@inline] size self = self.i
|
||||||
|
let[@inline] bytes_slice self = self.bytes
|
||||||
|
|
||||||
let clear self : unit =
|
let clear self : unit =
|
||||||
if Bytes.length self.bytes > 4_096 * 1_024 then
|
if
|
||||||
self.bytes <- Bytes.make 4096 ' ' (* free big buffer *);
|
Bytes.length self.bytes > 500 * 1_024
|
||||||
|
&& Bytes.length self.bytes > Bytes.length self.original
|
||||||
|
then
|
||||||
|
(* free big buffer *)
|
||||||
|
self.bytes <- self.original;
|
||||||
self.i <- 0
|
self.i <- 0
|
||||||
|
|
||||||
let resize self new_size : unit =
|
let resize self new_size : unit =
|
||||||
|
|
@ -14,6 +21,12 @@ let resize self new_size : unit =
|
||||||
Bytes.blit self.bytes 0 new_buf 0 self.i;
|
Bytes.blit self.bytes 0 new_buf 0 self.i;
|
||||||
self.bytes <- new_buf
|
self.bytes <- new_buf
|
||||||
|
|
||||||
|
let add_char self c : unit =
|
||||||
|
if self.i + 1 >= Bytes.length self.bytes then
|
||||||
|
resize self (self.i + (self.i / 2) + 10);
|
||||||
|
Bytes.set self.bytes self.i c;
|
||||||
|
self.i <- 1 + self.i
|
||||||
|
|
||||||
let add_bytes (self : t) s i len : unit =
|
let add_bytes (self : t) s i len : unit =
|
||||||
if self.i + len >= Bytes.length self.bytes then
|
if self.i + len >= Bytes.length self.bytes then
|
||||||
resize self (self.i + (self.i / 2) + len + 10);
|
resize self (self.i + (self.i / 2) + len + 10);
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,10 @@ val contents_and_clear : t -> string
|
||||||
(** Get contents of the buffer and clear it.
|
(** Get contents of the buffer and clear it.
|
||||||
@since 0.5 *)
|
@since 0.5 *)
|
||||||
|
|
||||||
|
val add_char : t -> char -> unit
|
||||||
|
(** Add a single char.
|
||||||
|
@since NEXT_RELEASE *)
|
||||||
|
|
||||||
val add_bytes : t -> bytes -> int -> int -> unit
|
val add_bytes : t -> bytes -> int -> int -> unit
|
||||||
(** Append given bytes slice to the buffer.
|
(** Append given bytes slice to the buffer.
|
||||||
@since 0.5 *)
|
@since 0.5 *)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue