1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
/*******************************************************************************
* Copyright (c) 2017 Association Cénotélie (cenotelie.fr)
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with this program.
* If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
//! Module for utility APIs
pub mod biglist;
pub mod bin;
pub mod iterable;
/// Represents a reference to a structure that can be either mutable or immutable
pub enum EitherMut<'a, T: 'a> {
/// The immutable reference
Immutable(&'a T),
/// The mutable reference
Mutable(&'a mut T)
}
impl<'a, T: 'a> EitherMut<'a, T> {
/// Gets a mutable reference
pub fn get_mut(&mut self) -> Option<&mut T> {
match self {
&mut EitherMut::Mutable(ref mut data) => Some(data),
&mut EitherMut::Immutable(ref _data) => None
}
}
/// Get an immutable reference
pub fn get(&self) -> &T {
match self {
&EitherMut::Mutable(ref data) => data,
&EitherMut::Immutable(ref data) => data
}
}
}