Skip to main content

SharedSnapshot

Struct SharedSnapshot 

Source
pub struct SharedSnapshot {
    pub sequence: AtomicU64,
    pub magic: u32,
    pub version: u32,
    pub hot_cycle: AtomicU64,
    pub hot_surprise_bits: AtomicU32,
    pub hot_curiosity_bits: AtomicU32,
    pub hot_predicted_hash: AtomicU64,
    /* private fields */
}
Expand description

96-byte snapshot of the consciousness stream. All fields are pre-computed by the writer; readers do no derivation. #[repr(C)] keeps the seqlock header and data block layout stable (relevant if a future file-mmap layer is ever built). The data fields live inside UnsafeCell so the writer can mutate them through &self (required for the seqlock protocol). The seqlock guarantees readers never see a torn write.

Fields§

§sequence: AtomicU64

Seqlock counter. Even = stable, odd = write in progress.

§magic: u32

SNAPSHOT_MAGIC. Lets readers detect a fresh/uninitialized snapshot.

§version: u32

SNAPSHOT_VERSION. Bumped on layout change.

§hot_cycle: AtomicU64

Lock-free cycle counter. Readers can check freshness without seqlock.

§hot_surprise_bits: AtomicU32

Lock-free surprise level (f32 stored as u32 bits).

§hot_curiosity_bits: AtomicU32

Lock-free curiosity level (f32 stored as u32 bits).

§hot_predicted_hash: AtomicU64

Lock-free predicted query hash.

Implementations§

Source§

impl SharedSnapshot

Source

pub fn new_zeroed() -> Self

Build a zeroed snapshot, ready to be written.

Source

pub fn begin_write(&self) -> u64

Begin a write. Increments sequence to an odd value, returns the value the writer must restore after the write to mark completion. Caller MUST call end_write with the returned value, even on panic.

Source

pub fn end_write(&self, expected: u64)

End a write. Stores an even sequence value, signaling readers that the data is consistent.

Source

pub unsafe fn data_mut(&self) -> &mut SnapshotData

Get an exclusive &mut reference to the data block. The seqlock protocol guarantees no reader can be accessing the data while this is held (the sequence is odd, so readers retry).

§Safety

Caller must hold the seqlock by having called begin_write and not yet called end_write. Only one writer at a time.

Source

pub fn read_cached_format(&self) -> String

Read the pre-formatted consciousness string. O(1) clone, no format!(). This is the fastest path for the MCP tool: ~50-100ns per call.

Source

pub fn read_hot_fields(&self) -> (u64, f32, f32, u64)

Read hot fields atomically without seqlock. ~5-20ns. Returns (cycle, surprise, curiosity, predicted_hash).

Source

pub fn is_fresh(&self, expected_cycle: u64) -> bool

Check if the snapshot is fresh (hot_cycle matches or exceeds expected).

Source

pub fn set_cached_format(&self, s: String)

Update cached format string. Called by the background cycle.

Source

pub fn set_hot_fields( &self, cycle: u64, surprise: f32, curiosity: f32, predicted_hash: u64, )

Update hot atomic fields. Called by the background cycle.

Source

pub fn read(&self) -> Option<SnapshotData>

Read the snapshot. Returns None after SNAPSHOT_MAX_RETRIES torn reads. The returned SnapshotData is a copy — no lock required to use it.

Trait Implementations§

Source§

impl Debug for SharedSnapshot

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Send for SharedSnapshot

Source§

impl Sync for SharedSnapshot

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more