Skip to content

Instantly share code, notes, and snippets.

@eddyb
Forked from tbillington/gist:21396d316c2310ca314e
Last active August 29, 2015 14:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save eddyb/b52984cd78dc0b7a4bb5 to your computer and use it in GitHub Desktop.
Save eddyb/b52984cd78dc0b7a4bb5 to your computer and use it in GitHub Desktop.
fn linked_face(vertexes: &[Rc<RefCell<Vertex>>], face: UnlinkedFace) -> Option<RefCell<Face>> {
Some(RefCell::new(Face {
a: match vertexes.get(face.a) {
Some(x) => x.clone(),
None => return None
},
b: match vertexes.get(face.b) {
Some(x) => x.clone(),
None => return None
},
c: match vertexes.get(face.c) {
Some(x) => x.clone(),
None => return None
},
d: match vertexes.get(face.d) {
Some(x) => x.clone(),
None => return None
}
}))
}
fn linked_face(vertexes: &[Rc<RefCell<Vertex>>], face: UnlinkedFace) -> Option<RefCell<Face>> {
let a = match vertexes.get(face.a) {
Some(x) => x.clone(),
None => return None
};
let b = match vertexes.get(face.b) {
Some(x) => x.clone(),
None => return None
};
let c = match vertexes.get(face.c) {
Some(x) => x.clone(),
None => return None
};
let d = match vertexes.get(face.d) {
Some(x) => x.clone(),
None => return None
};
Some(RefCell::new(Face { a: a, b: b, c: c, d: d }))
}
fn linked_face(vertexes: &[Rc<RefCell<Vertex>>], face: UnlinkedFace) -> Option<RefCell<Face>> {
macro_rules! face {
($field:ident) => (match vertexes.get(face.$field) {
Some(x) => x.clone(),
None => return None
})
}
Some(RefCell::new(Face {
a: face!(a),
b: face!(b),
c: face!(c),
d: face!(d)
}))
}
fn linked_face(vertexes: &[Rc<RefCell<Vertex>>], face: UnlinkedFace) -> Option<RefCell<Face>> {
macro_rules! face {
($($field:ident),+) => (Face {$(
$field: match vertexes.get(face.$field) {
Some(x) => x.clone(),
None => return None
}
),*})
}
Some(RefCell::new(face!(a, b, c, d)))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment