diff options
Diffstat (limited to 'src/Binary.vala')
-rw-r--r-- | src/Binary.vala | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/Binary.vala b/src/Binary.vala new file mode 100644 index 0000000..3ac988a --- /dev/null +++ b/src/Binary.vala @@ -0,0 +1,38 @@ +namespace Eva { + public class Binary : Object, Term { + public void* value {get; private set;} + public long len {get; private set;} + + public Binary(char[] v) { + value = Memory.dup(v, (uint)(sizeof(char)*v.length)); + len = v.length; + } + + public string to_string() { + return "#Bin"; + } + + protected bool do_match(Term o, Gee.Map<string, Term> vars, Gee.Map<string, string> aliases) { + if(o is Var) { + return o.do_match(this, vars, aliases); + } + + if(o is Binary) { + Binary b = o as Binary; + + if(b.len != len) + return false; + + return (Memory.cmp(value, b.value, len) == 0); + } + else { + return false; + } + } + + + public void encode(Erl.Buffer buffer) { + buffer.encode_binary((char*)value, len); + } + } +} |