pub trait MutTxnT: GraphMutTxnT + ChannelMutTxnT + DepsMutTxnT<DepsError = <Self as GraphTxnT>::GraphError> + TreeMutTxnT<TreeError = <Self as GraphTxnT>::GraphError> + TxnT {
    // Required methods
    fn open_or_create_channel(
        &mut self,
        name: &str
    ) -> Result<ChannelRef<Self>, Self::GraphError>;
    fn fork(
        &mut self,
        channel: &ChannelRef<Self>,
        name: &str
    ) -> Result<ChannelRef<Self>, ForkError<Self::GraphError>>;
    fn rename_channel(
        &mut self,
        channel: &mut ChannelRef<Self>,
        name: &str
    ) -> Result<(), ForkError<Self::GraphError>>;
    fn drop_channel(&mut self, name: &str) -> Result<bool, Self::GraphError>;
    fn commit(self) -> Result<(), Self::GraphError>;
    fn open_or_create_remote(
        &mut self,
        id: RemoteId,
        path: &str
    ) -> Result<RemoteRef<Self>, Self::GraphError>;
    fn put_remote(
        &mut self,
        remote: &mut RemoteRef<Self>,
        k: u64,
        v: (Hash, Merkle)
    ) -> Result<bool, TxnErr<Self::GraphError>>;
    fn del_remote(
        &mut self,
        remote: &mut RemoteRef<Self>,
        k: u64
    ) -> Result<bool, TxnErr<Self::GraphError>>;
    fn drop_remote(
        &mut self,
        remote: RemoteRef<Self>
    ) -> Result<bool, Self::GraphError>;
    fn drop_named_remote(
        &mut self,
        id: RemoteId
    ) -> Result<bool, Self::GraphError>;
    fn set_current_channel(&mut self, cur: &str) -> Result<(), Self::GraphError>;
}
Expand description

The trait of immutable transactions.

Required Methods§

source

fn open_or_create_channel( &mut self, name: &str ) -> Result<ChannelRef<Self>, Self::GraphError>

Open a channel, creating it if it is missing. The return type is a Rc<RefCell<…>> in order to avoid:

  • opening the same channel twice. Since a channel contains pointers, that could potentially lead to double-borrow issues. We absolutely have to check that at runtime (hence the RefCell).
  • writing the channel to disk (if the backend is written on the disk) for every minor operation on the channel.

Additionally, the Rc is used to:

  • avoid having to commit channels explicitly (channels are committed automatically upon committing the transaction), and
  • to return a value that doesn’t borrow the transaction, so that the channel can actually be used in a mutable transaction.
source

fn fork( &mut self, channel: &ChannelRef<Self>, name: &str ) -> Result<ChannelRef<Self>, ForkError<Self::GraphError>>

source

fn rename_channel( &mut self, channel: &mut ChannelRef<Self>, name: &str ) -> Result<(), ForkError<Self::GraphError>>

source

fn drop_channel(&mut self, name: &str) -> Result<bool, Self::GraphError>

source

fn commit(self) -> Result<(), Self::GraphError>

Commit this transaction.

source

fn open_or_create_remote( &mut self, id: RemoteId, path: &str ) -> Result<RemoteRef<Self>, Self::GraphError>

source

fn put_remote( &mut self, remote: &mut RemoteRef<Self>, k: u64, v: (Hash, Merkle) ) -> Result<bool, TxnErr<Self::GraphError>>

source

fn del_remote( &mut self, remote: &mut RemoteRef<Self>, k: u64 ) -> Result<bool, TxnErr<Self::GraphError>>

source

fn drop_remote( &mut self, remote: RemoteRef<Self> ) -> Result<bool, Self::GraphError>

source

fn drop_named_remote(&mut self, id: RemoteId) -> Result<bool, Self::GraphError>

source

fn set_current_channel(&mut self, cur: &str) -> Result<(), Self::GraphError>

Implementors§