Skip to content

Commit

Permalink
add uniqueAccounts set to ALT interface
Browse files Browse the repository at this point in the history
  • Loading branch information
jpe7s committed Sep 22, 2024
1 parent 7d7c78d commit 4dcc8d3
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import java.util.Arrays;
import java.util.HashMap;
import java.util.Set;
import java.util.function.BiFunction;

import static software.sava.core.accounts.PublicKey.PUBLIC_KEY_LENGTH;
Expand Down Expand Up @@ -119,4 +120,6 @@ default boolean containKey(final PublicKey publicKey) {
default int dataLength() {
return data().length;
}

Set<PublicKey> uniqueAccounts();
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@
import software.sava.core.accounts.PublicKey;
import software.sava.core.encoding.ByteUtil;

import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

Expand Down Expand Up @@ -94,6 +91,17 @@ public int numUniqueAccounts() {
return numUnique;
}

@Override
public Set<PublicKey> uniqueAccounts() {
final int numAccounts = numAccounts();
final var distinctAccounts = HashSet.<PublicKey>newHashSet(numAccounts);
for (int i = 0, offset = LOOKUP_TABLE_META_SIZE; offset < data.length; ++i, offset += PUBLIC_KEY_LENGTH) {
final var pubKey = readPubKey(data, offset);
distinctAccounts.add(pubKey);
}
return distinctAccounts;
}

@Override
public PublicKey account(final int index) {
return readPubKey(data, LOOKUP_TABLE_META_SIZE + (index << 5));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

import software.sava.core.accounts.PublicKey;

import java.util.HashSet;
import java.util.Set;

import static software.sava.core.accounts.PublicKey.PUBLIC_KEY_LENGTH;
import static software.sava.core.accounts.PublicKey.readPubKey;

abstract class AddressLookupTableRoot implements AddressLookupTable {

protected final PublicKey address;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

import software.sava.core.accounts.PublicKey;

import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import java.util.*;

final class AddressLookupTableWithReverseLookup extends AddressLookupTableRoot {

Expand Down Expand Up @@ -73,6 +71,11 @@ public int numUniqueAccounts() {
return distinctAccounts.size();
}

@Override
public Set<PublicKey> uniqueAccounts() {
return Collections.unmodifiableSet(distinctAccounts.keySet());
}

@Override
public byte[] discriminator() {
return discriminator;
Expand Down

0 comments on commit 4dcc8d3

Please sign in to comment.