pub struct HashTable { /* private fields */ }Expand description
In-memory table backed by a hash map of symbol keys to Values.
Implements the kernel Table contract (get/set/has/del/keys/
entries/len/clear) and the object-encoding contracts, so it can be
stored as an opaque object and round-tripped through its
HashTableDescriptor citizen form. The map is
guarded by an RwLock, so a HashTable is shareable and mutable through a
shared reference.
Implementations§
Source§impl HashTable
impl HashTable
Sourcepub fn with_entries(entries: Vec<(Symbol, Value)>) -> Self
pub fn with_entries(entries: Vec<(Symbol, Value)>) -> Self
Construct a hash table pre-populated with entries.
Later entries with the same key overwrite earlier ones.
§Examples
use std::sync::Arc;
use sim_kernel::{Cx, DefaultFactory, NoopEvalPolicy, Symbol, Table};
use sim_table_hash::HashTable;
let mut cx = Cx::new(Arc::new(NoopEvalPolicy), Arc::new(DefaultFactory));
let value = cx.factory().bool(true).unwrap();
let table = HashTable::with_entries(vec![(Symbol::new("a"), value.clone())]);
assert_eq!(table.len(&mut cx).unwrap(), 1);
assert!(table.has(&mut cx, Symbol::new("a")).unwrap());
assert_eq!(table.get(&mut cx, Symbol::new("a")).unwrap(), value);Trait Implementations§
Source§impl Citizen for HashTable
impl Citizen for HashTable
Source§fn citizen_symbol() -> Symbol
fn citizen_symbol() -> Symbol
The citizen’s
namespace/name class symbol.Source§fn citizen_version() -> u32
fn citizen_version() -> u32
The citizen’s encoding version.
Source§fn citizen_arity() -> usize
fn citizen_arity() -> usize
Number of constructor fields (excluding the version argument).
Source§fn citizen_fields() -> &'static [&'static str]
fn citizen_fields() -> &'static [&'static str]
The citizen’s field names, in constructor order.
Source§impl Object for HashTable
impl Object for HashTable
Source§fn display(&self, _cx: &mut Cx) -> Result<String>
fn display(&self, _cx: &mut Cx) -> Result<String>
Render the object as a human-readable display string.
Source§fn header(&self) -> &ObjectHeader
fn header(&self) -> &ObjectHeader
Identity and trust header for the object; defaults to the shared
anonymous header.
Source§fn op(&self, _key: &OpKey) -> Option<&dyn Op>
fn op(&self, _key: &OpKey) -> Option<&dyn Op>
Resolve the operation registered under
key, if any.Source§impl ObjectCompat for HashTable
impl ObjectCompat for HashTable
Source§fn class(&self, cx: &mut Cx) -> Result<ClassRef>
fn class(&self, cx: &mut Cx) -> Result<ClassRef>
Class object this value belongs to; defaults to nil.
Source§fn as_expr(&self, cx: &mut Cx) -> Result<Expr>
fn as_expr(&self, cx: &mut Cx) -> Result<Expr>
Expression form of the object; defaults to an opaque extension node.
Source§fn as_table_impl(&self) -> Option<&dyn Table>
fn as_table_impl(&self) -> Option<&dyn Table>
Table-implementation view, if the object is a table.
Source§fn as_object_encoder(&self) -> Option<&dyn ObjectEncode>
fn as_object_encoder(&self) -> Option<&dyn ObjectEncode>
Object-encoder view, if the object encodes other objects.
Source§fn as_callable(&self) -> Option<&dyn Callable>
fn as_callable(&self) -> Option<&dyn Callable>
Callable view, if the object can be invoked.
Source§fn as_read_constructor(&self) -> Option<&dyn ReadConstructor>
fn as_read_constructor(&self) -> Option<&dyn ReadConstructor>
Read-constructor view, if the object decodes data forms.
Source§fn as_number_domain(&self) -> Option<&(dyn NumberDomain + 'static)>
fn as_number_domain(&self) -> Option<&(dyn NumberDomain + 'static)>
Number-domain view, if the object is a number domain.
Source§fn as_number_value(&self) -> Option<&dyn NumberValue>
fn as_number_value(&self) -> Option<&dyn NumberValue>
Number-value view, if the object is a domain number.
Source§fn as_eval_fabric(&self) -> Option<&dyn EvalFabric>
fn as_eval_fabric(&self) -> Option<&dyn EvalFabric>
Eval-fabric view, if the object is a distributed eval surface.
Source§fn as_sequence(&self) -> Option<&dyn Sequence>
fn as_sequence(&self) -> Option<&dyn Sequence>
Sequence view, if the object is a sequence.
Source§fn as_list(&self) -> Option<&(dyn ListValue + 'static)>
fn as_list(&self) -> Option<&(dyn ListValue + 'static)>
List view, if the object is a list value.
Source§fn as_dir(&self) -> Option<&(dyn Dir + 'static)>
fn as_dir(&self) -> Option<&(dyn Dir + 'static)>
Directory view, if the object is a directory.
Source§impl ObjectEncode for HashTable
impl ObjectEncode for HashTable
Source§fn object_encoding(&self, cx: &mut Cx) -> Result<ObjectEncoding>
fn object_encoding(&self, cx: &mut Cx) -> Result<ObjectEncoding>
Returns the
ObjectEncoding this object should be rendered as.Source§impl Table for HashTable
impl Table for HashTable
Source§fn backend_symbol(&self) -> Symbol
fn backend_symbol(&self) -> Symbol
Symbol identifying the backend representation.
Source§fn get(&self, cx: &mut Cx, key: Symbol) -> Result<Value>
fn get(&self, cx: &mut Cx, key: Symbol) -> Result<Value>
Looks up
key, returning nil when absent.Source§fn set(&self, _cx: &mut Cx, key: Symbol, value: Value) -> Result<()>
fn set(&self, _cx: &mut Cx, key: Symbol, value: Value) -> Result<()>
Inserts or replaces the value for
key.Source§fn del(&self, cx: &mut Cx, key: Symbol) -> Result<Value>
fn del(&self, cx: &mut Cx, key: Symbol) -> Result<Value>
Removes
key, returning its prior value or nil.Source§fn entries(&self, _cx: &mut Cx) -> Result<Vec<(Symbol, Value)>>
fn entries(&self, _cx: &mut Cx) -> Result<Vec<(Symbol, Value)>>
All key/value pairs, in backend order.
Auto Trait Implementations§
impl !Freeze for HashTable
impl RefUnwindSafe for HashTable
impl Send for HashTable
impl Sync for HashTable
impl Unpin for HashTable
impl UnsafeUnpin for HashTable
impl UnwindSafe for HashTable
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more