diff --git a/src/main/java/me/mrletsplay/shareclientcore/document/ArrayCharBag.java b/src/main/java/me/mrletsplay/shareclientcore/document/ArrayCharBag.java index 34d1ef0..736de20 100644 --- a/src/main/java/me/mrletsplay/shareclientcore/document/ArrayCharBag.java +++ b/src/main/java/me/mrletsplay/shareclientcore/document/ArrayCharBag.java @@ -8,15 +8,29 @@ public class ArrayCharBag implements CharBag { private List chars = new ArrayList<>(); @Override - public void add(Char character) { + public int add(Char character) { int i = 0; - while(Util.comparePositions(chars.get(i).position(), character.position()) < 0) i++; + // TODO: use binary search + while(i < chars.size() && Util.comparePositions(chars.get(i).position(), character.position()) < 0) i++; chars.add(i, character); + return i; } @Override - public void remove(Char character) { + public int remove(Char character) { + int i = 0; + // TODO: use binary search + while(i < chars.size() && Util.comparePositions(chars.get(i).position(), character.position()) < 0) i++; + if(i == chars.size() || Util.comparePositions(chars.get(i).position(), character.position()) != 0) return -1; chars.remove(character); + return i; + } + + @Override + public String toString() { + return chars.stream() + .map(c -> c.value()) + .reduce(new StringBuilder(), (b, s) -> b.append(s), (a, b) -> a.append(b)).toString(); } } diff --git a/src/main/java/me/mrletsplay/shareclientcore/document/Char.java b/src/main/java/me/mrletsplay/shareclientcore/document/Char.java index 3486d86..d98e793 100644 --- a/src/main/java/me/mrletsplay/shareclientcore/document/Char.java +++ b/src/main/java/me/mrletsplay/shareclientcore/document/Char.java @@ -1,7 +1,3 @@ package me.mrletsplay.shareclientcore.document; -public record Char(Identifier[] position, int lamport, String value) { - - - -} +public record Char(Identifier[] position, int lamport, String value) {} diff --git a/src/main/java/me/mrletsplay/shareclientcore/document/CharBag.java b/src/main/java/me/mrletsplay/shareclientcore/document/CharBag.java index 5c129ec..83deafe 100644 --- a/src/main/java/me/mrletsplay/shareclientcore/document/CharBag.java +++ b/src/main/java/me/mrletsplay/shareclientcore/document/CharBag.java @@ -6,7 +6,18 @@ public interface CharBag { // public Character findBefore(PositionIdentifier position); // public Character findAfter(PositionIdentifier position); - public void add(Char character); - public void remove(Char character); + /** + * Adds a character to the bag and returns the index it was inserted at + * @param character The character to add + * @return The index it was inserted at + */ + public int add(Char character); + + /** + * Removes a character from the bag and returns the index it was located at, or -1 if it was not contained in the bag + * @param character The character to remove + * @return The index it was located at + */ + public int remove(Char character); }