From f87943409c8ae2e9f6ed81e7a1cfc5109c16f31a Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 10 Jul 2010 01:23:07 +0200 Subject: Split Term code to individual class sources --- src/Tuple.vala | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/Tuple.vala (limited to 'src/Tuple.vala') diff --git a/src/Tuple.vala b/src/Tuple.vala new file mode 100644 index 0000000..097973f --- /dev/null +++ b/src/Tuple.vala @@ -0,0 +1,67 @@ +namespace Eva { + public class Tuple : Object, Term { + private Term[] elements {get; set;} + + public Tuple(Term[] terms) { + elements = terms; + } + + public int size { + get { + return elements.length; + } + } + + public new unowned Term get(int i) { + assert(i >= 0 && i < size); + + return elements[i]; + } + + public string to_string() { + string ret = "{"; + bool first = true; + + foreach(Term term in elements) { + if(first) { + first = false; + ret += term.to_string(); + } + else { + ret += "," + term.to_string(); + } + } + + return ret + "}"; + } + + protected bool do_match(Term o, Gee.Map vars, Gee.Map aliases) { + if(o is Var) { + return o.do_match(this, vars, aliases); + } + + if(!(o is Tuple)) + return false; + + Tuple t = o as Tuple; + + if(t.size != size) + return false; + + for(int i = 0; i < size; ++i) { + if(!this[i].do_match(t[i], vars, aliases)) + return false; + } + + return true; + } + + public void encode(Erl.Buffer buffer) { + buffer.encode_tuple_header(size); + + foreach(Term term in elements) { + term.encode(buffer); + } + } + } +} -- cgit v1.2.3