2016-01-18 15:33:29 +00:00
|
|
|
// Copyright (c) 2011-2016 The Cryptonote developers
|
2015-09-18 11:55:31 +00:00
|
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
2015-07-30 15:22:07 +00:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <unordered_map>
|
|
|
|
#include <map>
|
|
|
|
|
|
|
|
#include "crypto/hash.h"
|
|
|
|
#include "CryptoNoteBasic.h"
|
|
|
|
|
|
|
|
namespace CryptoNote {
|
|
|
|
|
|
|
|
class ISerializer;
|
|
|
|
|
|
|
|
class PaymentIdIndex {
|
|
|
|
public:
|
|
|
|
PaymentIdIndex() = default;
|
|
|
|
|
|
|
|
bool add(const Transaction& transaction);
|
|
|
|
bool remove(const Transaction& transaction);
|
|
|
|
bool find(const Crypto::Hash& paymentId, std::vector<Crypto::Hash>& transactionHashes);
|
|
|
|
void clear();
|
|
|
|
|
|
|
|
void serialize(ISerializer& s);
|
|
|
|
|
|
|
|
template<class Archive>
|
|
|
|
void serialize(Archive& archive, unsigned int version) {
|
|
|
|
archive & index;
|
|
|
|
}
|
|
|
|
private:
|
|
|
|
std::unordered_multimap<Crypto::Hash, Crypto::Hash> index;
|
|
|
|
};
|
|
|
|
|
|
|
|
class TimestampBlocksIndex {
|
|
|
|
public:
|
|
|
|
TimestampBlocksIndex() = default;
|
|
|
|
|
|
|
|
bool add(uint64_t timestamp, const Crypto::Hash& hash);
|
|
|
|
bool remove(uint64_t timestamp, const Crypto::Hash& hash);
|
|
|
|
bool find(uint64_t timestampBegin, uint64_t timestampEnd, uint32_t hashesNumberLimit, std::vector<Crypto::Hash>& hashes, uint32_t& hashesNumberWithinTimestamps);
|
|
|
|
void clear();
|
|
|
|
|
|
|
|
void serialize(ISerializer& s);
|
|
|
|
|
|
|
|
template<class Archive>
|
|
|
|
void serialize(Archive& archive, unsigned int version) {
|
|
|
|
archive & index;
|
|
|
|
}
|
|
|
|
private:
|
|
|
|
std::multimap<uint64_t, Crypto::Hash> index;
|
|
|
|
};
|
|
|
|
|
|
|
|
class TimestampTransactionsIndex {
|
|
|
|
public:
|
|
|
|
TimestampTransactionsIndex() = default;
|
|
|
|
|
|
|
|
bool add(uint64_t timestamp, const Crypto::Hash& hash);
|
|
|
|
bool remove(uint64_t timestamp, const Crypto::Hash& hash);
|
|
|
|
bool find(uint64_t timestampBegin, uint64_t timestampEnd, uint64_t hashesNumberLimit, std::vector<Crypto::Hash>& hashes, uint64_t& hashesNumberWithinTimestamps);
|
|
|
|
void clear();
|
|
|
|
|
|
|
|
void serialize(ISerializer& s);
|
|
|
|
|
|
|
|
template<class Archive>
|
|
|
|
void serialize(Archive& archive, unsigned int version) {
|
|
|
|
archive & index;
|
|
|
|
}
|
|
|
|
private:
|
|
|
|
std::multimap<uint64_t, Crypto::Hash> index;
|
|
|
|
};
|
|
|
|
|
|
|
|
class GeneratedTransactionsIndex {
|
|
|
|
public:
|
|
|
|
GeneratedTransactionsIndex();
|
|
|
|
|
|
|
|
bool add(const Block& block);
|
|
|
|
bool remove(const Block& block);
|
|
|
|
bool find(uint32_t height, uint64_t& generatedTransactions);
|
|
|
|
void clear();
|
|
|
|
|
|
|
|
void serialize(ISerializer& s);
|
|
|
|
|
|
|
|
template<class Archive>
|
|
|
|
void serialize(Archive& archive, unsigned int version) {
|
|
|
|
archive & index;
|
|
|
|
archive & lastGeneratedTxNumber;
|
|
|
|
}
|
|
|
|
private:
|
|
|
|
std::unordered_map<uint32_t, uint64_t> index;
|
|
|
|
uint64_t lastGeneratedTxNumber;
|
|
|
|
};
|
|
|
|
|
|
|
|
class OrphanBlocksIndex {
|
|
|
|
public:
|
|
|
|
OrphanBlocksIndex() = default;
|
|
|
|
|
|
|
|
bool add(const Block& block);
|
|
|
|
bool remove(const Block& block);
|
|
|
|
bool find(uint32_t height, std::vector<Crypto::Hash>& blockHashes);
|
|
|
|
void clear();
|
|
|
|
private:
|
|
|
|
std::unordered_multimap<uint32_t, Crypto::Hash> index;
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|