コード例 #1
0
ファイル: graph.cpp プロジェクト: emiscience/Stash
void Graph::Load(std::fstream &stream, int version)
{
    // not the best way of doing this, should have some unique ID for accounts...
    // not strictly valid either, but are we going to have more than 512 accounts...
    stream.read((char *) &m_account, sizeof(unsigned char));

    LoadString(m_name, stream);

    m_startDate.Load(stream, version);
    m_endDate.Load(stream, version);

    stream.read((char *) &m_type, sizeof(unsigned char));

    unsigned char cBitset = 0;
    stream.read((char *) &cBitset, sizeof(unsigned char));

    std::bitset<8> localset(static_cast<unsigned long>(cBitset));

    m_ignoreTransfers = localset[0];

    if (version > 2)
    {
        stream.read((char *) &m_dateType, sizeof(unsigned char));
    }

    if (version > 4)
    {
        stream.read((char *) &m_itemsType, sizeof(unsigned char));

        m_items.clear();

        unsigned int numItems = 0;
        stream.read((char *) &numItems, sizeof(unsigned int));

        for (unsigned int i = 0; i < numItems; i++)
        {
            std::string strItem;
            LoadString(strItem, stream);

            m_items.insert(strItem);
        }

        stream.read((char *) &m_viewType, sizeof(unsigned char));
    }
}
コード例 #2
0
ファイル: transaction.cpp プロジェクト: emiscience/Stash
void Transaction::Load(std::fstream &stream, int version)
{
	m_Date.Load(stream, version);
	LoadString(m_Description, stream);
	LoadString(m_Payee, stream);
	LoadString(m_Category, stream);
	m_Amount.Load(stream, version);
	
	stream.read((char *) &m_Type, sizeof(unsigned char));
	
	unsigned char cBitset = 0;
	stream.read((char *) &cBitset, sizeof(unsigned char));
	
	std::bitset<8> localset(static_cast<unsigned long>(cBitset));
		
	m_Cleared = localset[0];
	m_Split = localset[1];
	
	if (version > 3)
	{
		m_Reconciled = localset[2];
		m_Flagged = localset[3];
		m_HasFITID = localset[4];
		
		if (m_HasFITID)
		{
			LoadString(m_FITID, stream);
		}
	}
	
	unsigned char numSplits = 0;	
	stream.read((char *) &numSplits, sizeof(unsigned char));
		
	for (int i = 0; i < numSplits; i++)
	{
		SplitTransaction tempSplit;
		tempSplit.Load(stream, version);
		
		m_aSplits.push_back(tempSplit);
	}
}
コード例 #3
0
ファイル: SetTest.cpp プロジェクト: soneyworld/libsetsync
void SetTest::testStartSync() {
	setsync::Set localset(config);
	setsync::Set remoteset(config2);
	CPPUNIT_ASSERT(localset.insert("hallo"));
	CPPUNIT_ASSERT(remoteset.insert("hallo"));
	CPPUNIT_ASSERT(localset == remoteset);
	SynchronizationProcess * localprocess = localset.createSyncProcess();
	setsync::ListDiffHandler localDiffHandler;
	SynchronizationProcess * remoteprocess = remoteset.createSyncProcess();
	setsync::ListDiffHandler remoteDiffHandler;
	std::size_t buffersize = localset.hash_.getHashSize();
	unsigned char buffer[buffersize];
	CPPUNIT_ASSERT(localprocess->getRootHash(buffer));
	CPPUNIT_ASSERT(remoteprocess->isEqual(buffer));
	CPPUNIT_ASSERT(remoteprocess->getRootHash(buffer));
	CPPUNIT_ASSERT(localprocess->isEqual(buffer));
	CPPUNIT_ASSERT(localDiffHandler.size()==0);
	CPPUNIT_ASSERT(remoteDiffHandler.size()==0);
	delete localprocess;
	delete remoteprocess;
	CPPUNIT_ASSERT(localset == remoteset);
}
コード例 #4
0
ファイル: SetTest.cpp プロジェクト: soneyworld/libsetsync
void SetTest::testLooseSync() {
	setsync::Set localset(config);
	setsync::Set remoteset(config2);
	CPPUNIT_ASSERT(localset.insert("hallo"));
	CPPUNIT_ASSERT(remoteset.insert("hallo"));

	CPPUNIT_ASSERT(localset.insert("hallo1"));
	SynchronizationProcess * localprocess = localset.createSyncProcess();
	setsync::ListDiffHandler localDiffHandler;
	SynchronizationProcess * remoteprocess = remoteset.createSyncProcess();
	setsync::ListDiffHandler remoteDiffHandler;
	std::size_t buffersize = localset.getHashFunction().getHashSize();
	unsigned char buffer[buffersize];
	std::size_t sending;
	while (localprocess->isBloomFilterOutputAvail()) {
		sending = localprocess->readNextBloomFilterChunk(buffer, buffersize);
		remoteprocess->processBloomFilterChunk(buffer, sending, remoteDiffHandler);
		if (remoteprocess->isBloomFilterOutputAvail()) {
			sending = remoteprocess->readNextBloomFilterChunk(buffer, buffersize);
			localprocess->processBloomFilterChunk(buffer, sending, localDiffHandler);
		}
	}
	while (remoteprocess->isBloomFilterOutputAvail()) {
		sending = remoteprocess->readNextBloomFilterChunk(buffer, buffersize);
		localprocess->processBloomFilterChunk(buffer, sending, localDiffHandler);
	}
	for (size_t i = 0; i < localDiffHandler.size(); i++) {
		CPPUNIT_ASSERT(remoteset.insert(localDiffHandler[i].first));
	}
	for (size_t i = 0; i < remoteDiffHandler.size(); i++) {
		CPPUNIT_ASSERT(localset.insert(remoteDiffHandler[i].first));
	}
	CPPUNIT_ASSERT(localset == remoteset);
	delete localprocess;
	delete remoteprocess;
}
コード例 #5
0
ファイル: SetTest.cpp プロジェクト: soneyworld/libsetsync
void SetTest::testSync() {
	setsync::Set localset(config);
	setsync::Set remoteset(config2);
	CPPUNIT_ASSERT(localset.insert("hallo"));
	CPPUNIT_ASSERT(remoteset.insert("hallo"));

	CPPUNIT_ASSERT(localset.insert("hallo1"));
	SynchronizationProcess * localprocess = localset.createSyncProcess();
	setsync::ListDiffHandler localDiffHandler;
	SynchronizationProcess * remoteprocess = remoteset.createSyncProcess();
	setsync::ListDiffHandler remoteDiffHandler;
	std::size_t buffersize = localset.getHashFunction().getHashSize();

	CPPUNIT_ASSERT(localprocess->calcOutputBufferSize(1,1024*8)>=localprocess->getMinBuffer());
	CPPUNIT_ASSERT(localprocess->calcOutputBufferSize(1000000,1024*8) == 1024);
	unsigned char buffer[buffersize];
	std::size_t sending;
	while (localprocess->isBloomFilterOutputAvail()) {
		sending = localprocess->readNextBloomFilterChunk(buffer, buffersize);
		remoteprocess->processBloomFilterChunk(buffer, sending, remoteDiffHandler);
		if (remoteprocess->isBloomFilterOutputAvail()) {
			sending = remoteprocess->readNextBloomFilterChunk(buffer, buffersize);
			localprocess->processBloomFilterChunk(buffer, sending, localDiffHandler);
		}
	}
	while (remoteprocess->isBloomFilterOutputAvail()) {
		sending = remoteprocess->readNextBloomFilterChunk(buffer, buffersize);
		localprocess->processBloomFilterChunk(buffer, sending, localDiffHandler);
	}
	for (size_t i = 0; i < localDiffHandler.size(); i++) {
		CPPUNIT_ASSERT(remoteset.insert(localDiffHandler[i].first));
	}
	for (size_t i = 0; i < remoteDiffHandler.size(); i++) {
		CPPUNIT_ASSERT(localset.insert(remoteDiffHandler[i].first));
	}
	// At this moment, the sets could be equal, but to ensure,
	// they are not, we will just put in a new entry to local set
	CPPUNIT_ASSERT(localset.insert("hallo2"));
	CPPUNIT_ASSERT(!(localset == remoteset));
	localDiffHandler.clear();
	remoteDiffHandler.clear();
	// TRIE SYNC Process!!!
	size_t treecutsize = 2 * localset.getHashFunction().getHashSize();
	unsigned char treecut[treecutsize];
	size_t subtriesize;
	std::size_t ackbuffersize = 20;
	unsigned char ackbuffer[ackbuffersize];
	std::size_t numberOfAcks;
	std::size_t acksize;

	while (!localprocess->done() && !remoteprocess->done()) {
		if (localprocess->isSubtrieOutputAvailable()) {
			subtriesize = localprocess->getSubTrie(treecut, treecutsize);
			CPPUNIT_ASSERT(subtriesize > 0);
			acksize = remoteprocess->processSubTrie(treecut, subtriesize);
			CPPUNIT_ASSERT(acksize > 0);
		}
		if (localprocess->isAckOutputAvailable()) {
			acksize = localprocess->readSomeTrieAcks(ackbuffer, ackbuffersize,
					&numberOfAcks);
			CPPUNIT_ASSERT(numberOfAcks > 0);
			CPPUNIT_ASSERT(acksize > 0);
			remoteprocess->processAcks(ackbuffer, acksize, numberOfAcks,
					remoteDiffHandler);
		}
		if (remoteprocess->isSubtrieOutputAvailable()) {
			subtriesize = remoteprocess->getSubTrie(treecut, treecutsize);
			CPPUNIT_ASSERT(subtriesize > 0);
			acksize = localprocess->processSubTrie(treecut, subtriesize);
			CPPUNIT_ASSERT(acksize > 0);
		}
		if (remoteprocess->isAckOutputAvailable()) {
			acksize = remoteprocess->readSomeTrieAcks(ackbuffer, ackbuffersize,
					&numberOfAcks);
			CPPUNIT_ASSERT(numberOfAcks > 0);
			CPPUNIT_ASSERT(acksize > 0);
			localprocess->processAcks(ackbuffer, acksize, numberOfAcks,
					localDiffHandler);
		}
	}
	for (std::size_t i = 0; i < localDiffHandler.size(); i++) {
		remoteset.insert(localDiffHandler[i].first);
	}
	localDiffHandler.clear();
	for (std::size_t i = 0; i < remoteDiffHandler.size(); i++) {
		localset.insert(remoteDiffHandler[i].first);
	}
	remoteDiffHandler.clear();
	CPPUNIT_ASSERT(localprocess->getRootHash(buffer));
	CPPUNIT_ASSERT(remoteprocess->isEqual(buffer));
	CPPUNIT_ASSERT(remoteprocess->getRootHash(buffer));
	CPPUNIT_ASSERT(localprocess->isEqual(buffer));
	CPPUNIT_ASSERT(localprocess->getReceivedBytes() == remoteprocess->getSentBytes());
	CPPUNIT_ASSERT(localprocess->getSentBytes() == remoteprocess->getReceivedBytes());
	delete localprocess;
	delete remoteprocess;
	CPPUNIT_ASSERT(localset == remoteset);
}
コード例 #6
0
ファイル: SetTest.cpp プロジェクト: soneyworld/libsetsync
void SetTest::testStrictSync() {
	setsync::Set localset(config);
	setsync::Set remoteset(config2);
	localset.insert("bla1");
	remoteset.insert("bla1");
	localset.insert("bla2");
	remoteset.insert("bla2");
	localset.insert("bla3");
	remoteset.insert("bla3");
	remoteset.insert("bla4");
	// Start sync
	size_t treecutsize = 2 * localset.getHashFunction().getHashSize();
	unsigned char treecut[treecutsize];
	SynchronizationProcess * localprocess = localset.createSyncProcess();
	setsync::ListDiffHandler localDiffHandler;
	SynchronizationProcess * remoteprocess = remoteset.createSyncProcess();
	setsync::ListDiffHandler remoteDiffHandler;

	size_t subtriesize;
	std::size_t ackbuffersize = 20;
	unsigned char ackbuffer[ackbuffersize];
	std::size_t numberOfAcks;
	std::size_t acksize;

	// Adding a greater diff to the sets
	localset.insert("bla5");
	localset.insert("bla6");
	localset.insert("bla8");
	localset.insert("bla9");
	localset.insert("bla10");

	remoteset.insert("bla7");
	remoteset.insert("bla11");
	remoteset.insert("bla12");
	remoteset.insert("bla13");
	remoteset.insert("bla14");
	// Deep search

	while (!localprocess->done() && !remoteprocess->done()) {
		if (localprocess->isSubtrieOutputAvailable()) {
			subtriesize = localprocess->getSubTrie(treecut, treecutsize);
			CPPUNIT_ASSERT(subtriesize > 0);
			acksize = remoteprocess->processSubTrie(treecut, subtriesize);
			CPPUNIT_ASSERT(acksize > 0);
		}
		if (localprocess->isAckOutputAvailable()) {
			acksize = localprocess->readSomeTrieAcks(ackbuffer, ackbuffersize,
					&numberOfAcks);
			CPPUNIT_ASSERT(numberOfAcks > 0);
			CPPUNIT_ASSERT(acksize > 0);
			remoteprocess->processAcks(ackbuffer, acksize, numberOfAcks,
					remoteDiffHandler);
		}
		if (remoteprocess->isSubtrieOutputAvailable()) {
			subtriesize = remoteprocess->getSubTrie(treecut, treecutsize);
			CPPUNIT_ASSERT(subtriesize > 0);
			acksize = localprocess->processSubTrie(treecut, subtriesize);
			CPPUNIT_ASSERT(acksize > 0);
		}
		if (remoteprocess->isAckOutputAvailable()) {
			acksize = remoteprocess->readSomeTrieAcks(ackbuffer, ackbuffersize,
					&numberOfAcks);
			CPPUNIT_ASSERT(numberOfAcks > 0);
			CPPUNIT_ASSERT(acksize > 0);
			localprocess->processAcks(ackbuffer, acksize, numberOfAcks,
					localDiffHandler);
		}
	}
	for (std::size_t i = 0; i < localDiffHandler.size(); i++) {
		remoteset.insert(localDiffHandler[i].first);
	}
	localDiffHandler.clear();
	CPPUNIT_ASSERT(remoteset.find("bla5"));
	CPPUNIT_ASSERT(remoteset.find("bla6"));
	CPPUNIT_ASSERT(remoteset.find("bla8"));
	CPPUNIT_ASSERT(remoteset.find("bla9"));
	CPPUNIT_ASSERT(remoteset.find("bla10"));

	for (std::size_t i = 0; i < remoteDiffHandler.size(); i++) {
		localset.insert(remoteDiffHandler[i].first);
	}
	remoteDiffHandler.clear();
	CPPUNIT_ASSERT(localset.find("bla7"));
	CPPUNIT_ASSERT(localset.find("bla11"));
	CPPUNIT_ASSERT(localset.find("bla12"));
	CPPUNIT_ASSERT(localset.find("bla13"));
	CPPUNIT_ASSERT(localset.find("bla14"));

	CPPUNIT_ASSERT(localset == remoteset);
	CPPUNIT_ASSERT(localprocess->getReceivedBytes() == remoteprocess->getSentBytes());
	CPPUNIT_ASSERT(localprocess->getSentBytes() == remoteprocess->getReceivedBytes());
	delete localprocess;
	delete remoteprocess;
}