package jelectrum;
import java.io.File;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;
import java.util.Collection;
import java.util.LinkedList;
import java.text.DecimalFormat;
import com.google.bitcoin.core.Sha256Hash;
import com.google.bitcoin.core.Transaction;
import com.google.bitcoin.core.StoredBlock;
import com.google.bitcoin.core.Block;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.AbstractMap.SimpleEntry;
public abstract class JelectrumDB implements jelectrum.db.DBFace
{
protected Config conf;
protected Map<Sha256Hash, SerializedTransaction> tx_map;
//protected Map<String, HashSet<Sha256Hash> > address_to_tx_map;
protected Map<Sha256Hash, StoredBlock> block_store_map;
protected Map<String, StoredBlock> special_block_store_map;
protected Map<Sha256Hash, SerializedBlock> block_map;
//protected Map<Sha256Hash, HashSet<Sha256Hash> > tx_to_block_map;
protected Map<Sha256Hash, String> block_rescan_map;
protected Map<String, Object> special_object_map;
protected Map<Integer, String> header_chunk_map;
protected Map<String, UtxoTrieNode> utxo_trie_map;
public JelectrumDB(Config conf)
{
this.conf = conf;
}
public void compact()
{
}
public void commit()
{
}
public void close()
{
}
public void open()
{
}
public abstract Map<Sha256Hash, StoredBlock> getBlockStoreMap();
public abstract Map<String, StoredBlock> getSpecialBlockStoreMap();
public abstract Map<Sha256Hash,SerializedTransaction> getTransactionMap();
public abstract Map<Sha256Hash, SerializedBlock> getBlockMap();
public abstract void addAddressToTxMap(String address, Sha256Hash hash);
public final void addAddressesToTxMap(Collection<String> addresses, Sha256Hash hash)
{
LinkedList<Map.Entry<String, Sha256Hash>> lst = new LinkedList<>();
for(String a : addresses)
{
lst.add(new SimpleEntry<String, Sha256Hash>(a, hash));
}
addAddressesToTxMap(lst);
}
/**
* If the store has a bulk insert it is best to override this with that
*/
public void addAddressesToTxMap(Collection<Map.Entry<String, Sha256Hash> > lst)
{
for(Map.Entry<String, Sha256Hash> me : lst)
{
addAddressToTxMap(me.getKey(), me.getValue());
}
}
public abstract Set<Sha256Hash> getAddressToTxSet(String address);
public abstract void addTxToBlockMap(Sha256Hash tx, Sha256Hash block);
public final void addTxsToBlockMap(Collection<Sha256Hash> txs, Sha256Hash block)
{
LinkedList<Map.Entry<Sha256Hash, Sha256Hash>> lst = new LinkedList<>();
for(Sha256Hash tx : txs)
{
lst.add(new SimpleEntry<Sha256Hash, Sha256Hash>(tx, block));
addTxToBlockMap(tx, block);
}
addTxsToBlockMap(lst);
}
/**
* If the store has a bulk insert it is best to override this with that
*/
public void addTxsToBlockMap(Collection<Map.Entry<Sha256Hash, Sha256Hash> > lst)
{
for(Map.Entry<Sha256Hash, Sha256Hash> me : lst)
{
addTxToBlockMap(me.getKey(), me.getValue());
}
}
public abstract Set<Sha256Hash> getTxToBlockMap(Sha256Hash tx);
public abstract Map<Sha256Hash, String> getBlockRescanMap();
public abstract Map<String, Object> getSpecialObjectMap();
public abstract Map<Integer, String> getHeaderChunkMap();
public Map<String, UtxoTrieNode> getUtxoTrieMap()
{
return utxo_trie_map;
}
}