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}