From 59c2859881754b0f8afe1639744befd79c104dc3 Mon Sep 17 00:00:00 2001 From: Vaci Koblizek Date: Sun, 27 Sep 2020 23:20:33 +0100 Subject: [PATCH] implement cap table builder and reader --- .../org/capnproto/BuilderCapabilityTable.java | 34 +++++++++++++++++++ .../org/capnproto/ReaderCapabilityTable.java | 17 ++++++++++ 2 files changed, 51 insertions(+) create mode 100644 runtime/src/main/java/org/capnproto/BuilderCapabilityTable.java create mode 100644 runtime/src/main/java/org/capnproto/ReaderCapabilityTable.java diff --git a/runtime/src/main/java/org/capnproto/BuilderCapabilityTable.java b/runtime/src/main/java/org/capnproto/BuilderCapabilityTable.java new file mode 100644 index 0000000..5996c47 --- /dev/null +++ b/runtime/src/main/java/org/capnproto/BuilderCapabilityTable.java @@ -0,0 +1,34 @@ +package org.capnproto; + +import java.util.ArrayList; +import java.util.List; + +class BuilderCapabilityTable implements CapTableBuilder { + + private final List table = new ArrayList<>(); + + BuilderCapabilityTable() { + } + + @Override + public ClientHook extractCap(int index) { + return table.get(index); + } + + @Override + public int injectCap(ClientHook cap) { + int index = table.size(); + table.add(cap); + return index; + } + + @Override + public void dropCap(int index) { + table.set(index, null); + } + + @Override + public ClientHook[] getTable() { + return table.toArray(new ClientHook[0]); + } +} diff --git a/runtime/src/main/java/org/capnproto/ReaderCapabilityTable.java b/runtime/src/main/java/org/capnproto/ReaderCapabilityTable.java new file mode 100644 index 0000000..a1ba09b --- /dev/null +++ b/runtime/src/main/java/org/capnproto/ReaderCapabilityTable.java @@ -0,0 +1,17 @@ +package org.capnproto; + +import java.util.List; + +class ReaderCapabilityTable implements CapTableReader { + + final List table; + + ReaderCapabilityTable(List table) { + this.table = table; + } + + @Override + public ClientHook extractCap(int index) { + return index < table.size() ? table.get(index) : null; + } +}