pcp/kernel/
restoration.rs

1// Copyright 2015 Pierre Talbot (IRCAM)
2
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6
7//     http://www.apache.org/licenses/LICENSE-2.0
8
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15pub trait Freeze : Sized
16{
17  type FrozenState : Snapshot<State=Self>;
18  fn freeze(self) -> Self::FrozenState;
19}
20
21pub trait Snapshot : Sized
22{
23  type Label;
24  type State : Freeze<FrozenState=Self>;
25
26  fn label(&mut self) -> Self::Label;
27  fn restore(self, label: Self::Label) -> Self::State;
28  fn unfreeze(mut self) -> Self::State {
29    let label = self.label();
30    self.restore(label)
31  }
32}