[!NOTE] This is one of 199 standalone projects, maintained as part of the @thi.ng/umbrella monorepo and anti-framework.
🚀 Please help me to work full-time on these projects by sponsoring me on GitHub. Thank you! ❤️
General purpose and generic read/write buffer implementations with different behaviors/orderings.
The package provides different buffer implementations to control blocking behaviors and backpressure handling (aka attempting to write faster than values are being read, essentially a memory management issue).
The following buffer types/behaviors are included, all accepting a max. capacity and all implementing the IReadWriteBuffer interface:
-
fifo
: First in, first out ring buffer. -
lifo
: Last in, first out. Write behavior is the same as withfifo
, reads are in reverse order (as the name indicates), i.e. the last value written will be the first value read (i.e. stack behavior). -
sliding
: Sliding window ring buffer. Whilst the buffer is at full capacity, new writes will first expunge the oldest buffered value (similar to LRU cache behavior). Read behavior is the same as forfifo
. -
dropping
: Dropping value ring buffer. Whilst the buffer is at full capacity, new writes will be silently ignored. Read behavior is the same as forfifo
.
STABLE - used in production
Search or submit any issues for this package
yarn add @thi.ng/buffers
ESM import:
import * as buf from "@thi.ng/buffers";
Browser ESM import:
<script type="module" src="https://esm.run/@thi.ng/buffers"></script>
For Node.js REPL:
const buf = await import("@thi.ng/buffers");
Package sizes (brotli'd, pre-treeshake): ESM: 606 bytes
Note: @thi.ng/api is in most cases a type-only import (not used at runtime)
TODO
If this project contributes to an academic publication, please cite it as:
@misc{thing-buffers,
title = "@thi.ng/buffers",
author = "Karsten Schmidt",
note = "https://thi.ng/buffers",
year = 2016
}
© 2016 - 2024 Karsten Schmidt // Apache License 2.0