summaryrefslogtreecommitdiffstats
path: root/src/Port.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/Port.vala')
-rw-r--r--src/Port.vala46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/Port.vala b/src/Port.vala
new file mode 100644
index 0000000..b67c808
--- /dev/null
+++ b/src/Port.vala
@@ -0,0 +1,46 @@
+namespace Eva {
+ public class Port : Object, Term {
+ public string node {get; construct;}
+ public uint id {get; construct;}
+ public uint creation {get; construct;}
+
+ public Port(Erl.Port port) {
+ this.create(array_to_string(port.node, Erl.MAXATOMLEN), port.id, port.creation);
+ }
+
+ private Port.create(string node0, uint id0, uint creation0) {
+ Object(node: node0, id: id0, creation: creation0);
+ }
+
+ public string to_string() {
+ return "#Port";
+ }
+
+ 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 Port))
+ return false;
+
+ Port p = o as Port;
+
+ return (node == p.node && id == p.id && creation == p.creation);
+ }
+
+ public void encode(Erl.Buffer buffer) {
+ Erl.Port port = Erl.Port();
+ char[]? nodedata = string_to_array(node);
+ assert(nodedata != null);
+
+ Memory.copy(port.node, nodedata, int.min(Erl.MAXATOMLEN, nodedata.length));
+ port.node[int.min(Erl.MAXATOMLEN, nodedata.length)] = 0;
+
+ port.id = id;
+ port.creation = creation;
+
+ buffer.encode_port(port);
+ }
+ }
+}