summaryrefslogtreecommitdiffstats
path: root/src/Binary.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/Binary.vala')
-rw-r--r--src/Binary.vala38
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);
+ }
+ }
+}