X-Git-Url: http://git.megacz.com/?p=nestedvm.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fnestedvm%2Futil%2FSeekable.java;fp=src%2Forg%2Fibex%2Fnestedvm%2Futil%2FSeekable.java;h=d49df6658bd9f920e592bc47f20ae4b06d28e62e;hp=964ebc2852da401d238e47679d62b3f371b9b029;hb=b9a61c0d0d94182340ac416abea42d07bc64baff;hpb=1b398f9945d32b9d63d7fc64c9cf7a6af332d290 diff --git a/src/org/ibex/nestedvm/util/Seekable.java b/src/org/ibex/nestedvm/util/Seekable.java index 964ebc2..d49df66 100644 --- a/src/org/ibex/nestedvm/util/Seekable.java +++ b/src/org/ibex/nestedvm/util/Seekable.java @@ -149,12 +149,29 @@ public abstract class Seekable { public void close() throws IOException { is.close(); } } - public interface Lock { - public Seekable seekable(); - public boolean isShared(); - public boolean isValid(); - public void release() throws IOException; - public long position(); - public long size(); + public abstract static class Lock { + private Object owner = null; + + public abstract Seekable seekable(); + public abstract boolean isShared(); + public abstract boolean isValid(); + public abstract void release() throws IOException; + public abstract long position(); + public abstract long size(); + + public void setOwner(Object o) { owner = o; } + public Object getOwner() { return owner; } + + public final boolean contains(int start, int len) { + return start >= position() && position() + size() >= start + len; + } + + public final boolean contained(int start, int len) { + return start < position() && position() + size() < start + len; + } + + public final boolean overlaps(int start, int len) { + return contains(start, len) || contained(start, len); + } } }