Skip to content

Commit

Permalink
Merge pull request capnproto#24 from vaci/vaci/portability
Browse files Browse the repository at this point in the history
Patches to assist porting back to official release
  • Loading branch information
vaci authored Mar 12, 2022
2 parents 845186f + 7c521d5 commit 88182b9
Show file tree
Hide file tree
Showing 12 changed files with 48 additions and 41 deletions.
12 changes: 6 additions & 6 deletions runtime/src/main/java/org/capnproto/AnyPointer.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public void setPointerBuilder(SegmentBuilder segment, CapTableBuilder capTable,
}
public static final Factory factory = new Factory();

public final static class Reader extends Capability.ReaderContext {
public final static class Reader extends CapTableReader.ReaderContext {
final SegmentReader segment;
final int pointer; // offset in words
final int nestingLimit;
Expand All @@ -67,7 +67,7 @@ public Reader(SegmentReader segment, CapTableReader capTable, int pointer, int n
}

final Reader imbue(CapTableReader capTable) {
var result = new Reader(segment, pointer, nestingLimit);
Reader result = new Reader(segment, pointer, nestingLimit);
result.capTable = capTable;
return result;
}
Expand All @@ -83,17 +83,17 @@ public final <T> T getAs(FromPointerReader<T> factory) {
public final ClientHook getPipelinedCap(short[] ops) {
AnyPointer.Reader any = this;

for (var pointerIndex: ops) {
for (short pointerIndex: ops) {
if (pointerIndex >= 0) {
var reader = WireHelpers.readStructPointer(any.segment, any.capTable, any.pointer, null, 0, any.nestingLimit);
StructReader reader = WireHelpers.readStructPointer(any.segment, any.capTable, any.pointer, null, 0, any.nestingLimit);
any = reader._getPointerField(AnyPointer.factory, pointerIndex);
}
}
return WireHelpers.readCapabilityPointer(any.segment, any.capTable, any.pointer, 0);
}
}

public static final class Builder extends Capability.BuilderContext {
public static final class Builder extends CapTableBuilder.BuilderContext {
final SegmentBuilder segment;
final int pointer;

Expand Down Expand Up @@ -176,7 +176,7 @@ public ClientHook asCap() {
}

public Pipeline getPointerField(short pointerIndex) {
var newOps = new short[this.ops.length + 1];
short[] newOps = new short[this.ops.length + 1];
System.arraycopy(this.ops, 0, newOps, 0, this.ops.length);
newOps[this.ops.length] = pointerIndex;
return new Pipeline(this.hook, newOps);
Expand Down
5 changes: 5 additions & 0 deletions runtime/src/main/java/org/capnproto/CapTableBuilder.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
package org.capnproto;

public interface CapTableBuilder extends CapTableReader {

class BuilderContext {
public CapTableBuilder capTable;
}

int injectCap(ClientHook cap);

void dropCap(int index);
Expand Down
5 changes: 5 additions & 0 deletions runtime/src/main/java/org/capnproto/CapTableReader.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package org.capnproto;

public interface CapTableReader {

class ReaderContext {
public CapTableReader capTable;
}

ClientHook extractCap(int index);
}
14 changes: 3 additions & 11 deletions runtime/src/main/java/org/capnproto/Capability.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,10 @@
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;

public final class Capability {

static final Object NULL_CAPABILITY_BRAND = new Object();
static final Object BROKEN_CAPABILITY_BRAND = new Object();

public static class BuilderContext {
public CapTableBuilder capTable;
}
import static org.capnproto.ClientHook.BROKEN_CAPABILITY_BRAND;
import static org.capnproto.ClientHook.NULL_CAPABILITY_BRAND;

public static class ReaderContext {
public CapTableReader capTable;
}
public final class Capability {

public static abstract class Factory<T extends ClientBase>
implements FromPointerReader<T>,
Expand Down
10 changes: 6 additions & 4 deletions runtime/src/main/java/org/capnproto/ClientHook.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

public interface ClientHook {

static final Object NULL_CAPABILITY_BRAND = new Object();
static final Object BROKEN_CAPABILITY_BRAND = new Object();
/**
* Start a new call, allowing the client to allocate request/response objects as it sees fit.
* This version is used when calls are made from application code in the local process.
Expand Down Expand Up @@ -59,7 +61,7 @@ default CompletableFuture<ClientHook> whenMoreResolved() {
* Repeatedly calls whenMoreResolved() until it returns nullptr.
*/
default CompletableFuture<java.lang.Void> whenResolved() {
var promise = whenMoreResolved();
CompletableFuture<ClientHook> promise = whenMoreResolved();
return promise != null
? promise.thenCompose(ClientHook::whenResolved)
: CompletableFuture.completedFuture(null);
Expand All @@ -70,18 +72,18 @@ default CompletableFuture<java.lang.Void> whenResolved() {
* reading a null pointer out of a Cap'n Proto message.
*/
default boolean isNull() {
return getBrand() == Capability.NULL_CAPABILITY_BRAND;
return getBrand() == NULL_CAPABILITY_BRAND;
}

/**
* Returns true if the capability was created by newBrokenCap().
*/
default boolean isError() {
return getBrand() == Capability.BROKEN_CAPABILITY_BRAND;
return getBrand() == BROKEN_CAPABILITY_BRAND;
}

/**
* Implements {@link Capability.Client.getFd}. If this returns null but whenMoreResolved() returns
* Implements Capability.Client.getFd. If this returns null but whenMoreResolved() returns
* non-null, then Capability::Client::getFd() waits for resolution and tries again.
*/
default FileDescriptor getFd() {
Expand Down
6 changes: 3 additions & 3 deletions runtime/src/main/java/org/capnproto/ExportTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public T find(int id) {
}

public T erase(int id, T entry) {
var value = slots.get(id);
T value = slots.get(id);
if (value == entry) {
freeIds.add(id);
return slots.remove(id);
Expand All @@ -30,8 +30,8 @@ public T erase(int id, T entry) {

public T next() {
int id = freeIds.isEmpty() ? max++ : freeIds.remove();
var value = newExportable(id);
var prev = slots.put(id, value);
T value = newExportable(id);
T prev = slots.put(id, value);
assert prev == null;
return value;
}
Expand Down
2 changes: 1 addition & 1 deletion runtime/src/main/java/org/capnproto/ImportTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public T find(int id) {
}

public T erase(int id, T entry) {
var removed = slots.remove(id, entry);
boolean removed = slots.remove(id, entry);
assert removed;
return entry;
}
Expand Down
8 changes: 4 additions & 4 deletions runtime/src/main/java/org/capnproto/ListBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,17 @@

import java.util.List;

public class ListBuilder extends Capability.BuilderContext {
public class ListBuilder extends CapTableBuilder.BuilderContext {
public interface Factory<T> {
T constructBuilder(SegmentBuilder segment, int ptr,
int elementCount, int step,
int structDataSize, short structPointerCount);
default T constructBuilder(SegmentBuilder segment, CapTableBuilder capTable, int ptr,
int elementCount, int step,
int structDataSize, short structPointerCount) {
var result = constructBuilder(segment, ptr, elementCount, step, structDataSize, structPointerCount);
if (result instanceof Capability.BuilderContext) {
((Capability.BuilderContext) result).capTable = capTable;
T result = constructBuilder(segment, ptr, elementCount, step, structDataSize, structPointerCount);
if (result instanceof CapTableBuilder.BuilderContext) {
((CapTableBuilder.BuilderContext) result).capTable = capTable;
}
return result;
}
Expand Down
8 changes: 4 additions & 4 deletions runtime/src/main/java/org/capnproto/ListReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

package org.capnproto;

public class ListReader extends Capability.ReaderContext {
public class ListReader extends CapTableReader.ReaderContext {
public interface Factory<T> {
T constructReader(SegmentReader segment,
int ptr,
Expand All @@ -31,9 +31,9 @@ T constructReader(SegmentReader segment,
default T constructReader(SegmentReader segment, CapTableReader capTable, int ptr,
int elementCount, int step,
int structDataSize, short structPointerCount, int nestingLimit) {
var result = constructReader(segment, ptr, elementCount, step, structDataSize, structPointerCount, nestingLimit);
if (result instanceof Capability.ReaderContext) {
((Capability.ReaderContext) result).capTable = capTable;
T result = constructReader(segment, ptr, elementCount, step, structDataSize, structPointerCount, nestingLimit);
if (result instanceof CapTableReader.ReaderContext) {
((CapTableReader.ReaderContext) result).capTable = capTable;
}
return result;
}
Expand Down
3 changes: 3 additions & 0 deletions runtime/src/main/java/org/capnproto/SetPointerBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,8 @@
package org.capnproto;

public interface SetPointerBuilder<Builder, Reader> {
default void setPointerBuilder(SegmentBuilder segment, int pointer, Reader value) {
setPointerBuilder(segment, null, pointer, value);
}
void setPointerBuilder(SegmentBuilder segment, CapTableBuilder capTable, int pointer, Reader value);
}
8 changes: 4 additions & 4 deletions runtime/src/main/java/org/capnproto/StructBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@

package org.capnproto;

public class StructBuilder extends Capability.BuilderContext {
public class StructBuilder extends CapTableBuilder.BuilderContext {
public interface Factory<T> {
T constructBuilder(SegmentBuilder segment, int data, int pointers, int dataSize,
short pointerCount);
default T constructBuilder(SegmentBuilder segment, CapTableBuilder capTable, int data, int pointers, int dataSize,
short pointerCount) {
var result = constructBuilder(segment, data, pointers, dataSize, pointerCount);
if (result instanceof Capability.BuilderContext) {
((Capability.BuilderContext) result).capTable = capTable;
T result = constructBuilder(segment, data, pointers, dataSize, pointerCount);
if (result instanceof CapTableBuilder.BuilderContext) {
((CapTableBuilder.BuilderContext) result).capTable = capTable;
}
return result;
}
Expand Down
8 changes: 4 additions & 4 deletions runtime/src/main/java/org/capnproto/StructReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,17 @@

package org.capnproto;

public class StructReader extends Capability.ReaderContext {
public class StructReader extends CapTableReader.ReaderContext {
public interface Factory<T> {
T constructReader(SegmentReader segment, int data, int pointers,
int dataSize, short pointerCount,
int nestingLimit);
default T constructReader(SegmentReader segment, CapTableReader capTable, int data, int pointers,
int dataSize, short pointerCount,
int nestingLimit) {
var result = constructReader(segment, data, pointers, dataSize, pointerCount, nestingLimit);
if (result instanceof Capability.ReaderContext) {
((Capability.ReaderContext) result).capTable = capTable;
T result = constructReader(segment, data, pointers, dataSize, pointerCount, nestingLimit);
if (result instanceof CapTableReader.ReaderContext) {
((CapTableReader.ReaderContext) result).capTable = capTable;
}
return result;
}
Expand Down

0 comments on commit 88182b9

Please sign in to comment.