コード例 #1
0
void CGridDlg::OnDeltaposSpinVerticalCount(NMHDR *pNMHDR, LRESULT *pResult) {
  LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
  UINT value;
  if(getUintValue(IDC_EDITVERTICALCOUNT, value)) {
    setVerticalCount(value - pNMUpDown->iDelta);
  }
  *pResult = 0;
}
コード例 #2
0
void CGridDlg::OnEnChangeEditHorizontalCount() {
  if(m_changeHandlerActive) return;
  m_changeHandlerActive = true;
  UINT value;
  if(getUintValue(IDC_EDITHORIZONTALCOUNT, value)) {
    setHorizontalCount(value);
  }
  m_changeHandlerActive = false;
}
コード例 #3
0
void CGridDlg::OnEnChangeEditVerticalCount() {
  if(m_changeHandlerActive) return;
  m_changeHandlerActive = true;
  UINT value;
  if(getUintValue(IDC_EDITVERTICALCOUNT, value)) {
    setVerticalCount(value);
  }
  m_changeHandlerActive = false;
}
コード例 #4
0
int main( int argc, const char* argv[])
{
	g_errorhnd = strus::createErrorBuffer_standard( stderr, 1, NULL/*debug trace interface*/);
	if (!g_errorhnd) return -1;

	if (argc <= 1 || std::strcmp( argv[1], "-h") == 0 || std::strcmp( argv[1], "--help") == 0)
	{
		printUsage( argc, argv);
		return 0;
	}
	else if (argc < 3)
	{
		std::cerr << "ERROR too few parameters" << std::endl;
		printUsage( argc, argv);
		return 1;
	}
	else if (argc > 4)
	{
		std::cerr << "ERROR too many parameters" << std::endl;
		printUsage( argc, argv);
		return 1;
	}
	try
	{
		// Create random test collection:
		int nofDocs = (int)g_random.get( 0, 1000000) - 500000;
		int nofDocsPart = nofDocs / 2;
		unsigned int nofTerms = getUintValue( argv[1]);
		unsigned int diffRange = getUintValue( argv[2]);
		std::string storagePath = (argc > 3) ? argv[3] : "";
		TermCollection collection( nofTerms, diffRange);

		// Build statistics:
		strus::local_ptr<strus::StatisticsProcessorInterface> pmp( strus::createStandardStatisticsProcessor( strus::StatisticsDefaultNofBlocks, strus::StatisticsDefaultMsgChunkSize, g_errorhnd));
		strus::local_ptr<strus::StatisticsBuilderInterface> builder( pmp->createBuilder( storagePath));
		if (!builder.get())
		{
			throw std::runtime_error( g_errorhnd->fetchError());
		}
		builder->setNofDocumentsInsertedChange( nofDocsPart);

		typedef TermCollection::Term Term;
		unsigned int termsByteSize = 0;
		std::vector<Term>::const_iterator ti = collection.termar.begin(), te = collection.termar.end();
		int rr = collection.termar.size() / 3 + 1;
		for (int tidx=0; ti != te; ++ti,++tidx)
		{
#ifdef STRUS_LOWLEVEL_DEBUG
			std::cerr << "add df change '" << ti->type << "' '" << ti->value << "' " << ti->diff << std::endl;
#endif
			termsByteSize += ti->type.size() + ti->value.size() + 5;
			builder->addDfChange( ti->type.c_str(), ti->value.c_str(), ti->diff);
			if ((int)g_random.get( 0, rr) == 1)
			{
				int nn = (nofDocs - nofDocsPart) / 2;
				builder->setNofDocumentsInsertedChange( nn);
				nofDocsPart += nn;
			}
		}
		builder->setNofDocumentsInsertedChange( nofDocs - nofDocsPart);

		// Iterate through messages and accumulate statistics stored:
		std::size_t blobsize = 0;
		int nofDocsInserted = 0;
		std::set<Term> termset;

		strus::local_ptr<strus::StatisticsIteratorInterface> iterator;
		if (storagePath.empty())
		{
			iterator.reset( builder->createIteratorAndRollback());
		}
		else
		{
			strus::TimeStamp timeStampBeforeNow( ::time(NULL)-1);
			if (!builder->commit())
			{
				throw std::runtime_error( g_errorhnd->fetchError());
			}
			iterator.reset( builder->createIterator( timeStampBeforeNow));
			if (!iterator.get())
			{
				throw std::runtime_error( g_errorhnd->fetchError());
			}
			strus::TimeStamp timeStamp10MinutesBeforeNow( ::time(NULL)-600);
			builder->releaseStatistics( timeStamp10MinutesBeforeNow);
		}
		strus::StatisticsMessage msg = iterator->getNext();
		for (; !msg.empty(); msg = iterator->getNext())
		{
			strus::local_ptr<strus::StatisticsViewerInterface> viewer( pmp->createViewer( msg.ptr(), msg.size()));
			if (!viewer.get())
			{
				throw std::runtime_error( g_errorhnd->fetchError());
			}
			nofDocsInserted += viewer->nofDocumentsInsertedChange();
			blobsize += msg.size();

#ifdef STRUS_LOWLEVEL_DEBUG
			int blockcnt = 0;
			std::cerr << "fetch message " << ++blockcnt << " " << msg.size() << std::endl;
#endif
			strus::TermStatisticsChange rec;
			while (viewer->nextDfChange( rec))
			{
#ifdef STRUS_LOWLEVEL_DEBUG
				std::cout << "result df change " << rec.type() << " " << rec.value() << " " << rec.increment() << std::endl;
#endif
				termset.insert( Term( rec.type(), rec.value(), rec.increment()));
			}
		}
		if (g_errorhnd->hasError())
		{
			throw std::runtime_error( g_errorhnd->fetchError());
		}

		// Compare test output with expected:
		std::vector<Term> termar;
		std::set<Term>::const_iterator si = termset.begin(), se = termset.end();
		for (; si != se; ++si)
		{
			termar.push_back( *si);
		}
		if (nofDocs != nofDocsInserted)
		{
			throw std::runtime_error( strus::string_format( "statistics number of documents %d does not match expected %d", nofDocsInserted, nofDocs));
		}
		if (collection.termar.size() != termar.size())
		{
			std::cerr << "COLLECTION SIZE " << collection.termar.size() << " MESSAGE ITEMS " << termar.size() << std::endl;
			throw std::runtime_error( "statistics message number of messages does not match");
		}
		std::vector<Term>::const_iterator oi = collection.termar.begin(), oe = collection.termar.end();
		ti = termar.begin(), te = termar.end();

		for (int tidx=0; oi != oe && ti != te; ++oi,++ti)
		{
			if (oi->type != ti->type)
			{
				std::cerr << "[" << tidx << "] TYPE '" << ti->type << "' != '" << oi->type << "'" << std::endl;
				throw std::runtime_error( "statistics message item type does not match");
			}
			if (oi->value != ti->value)
			{
				std::cerr << "[" << tidx << "] VALUE '" << ti->value << "' != '" << oi->value << "'" << std::endl;
				throw std::runtime_error( "statistics message item value does not match");
			}
			if (oi->diff != ti->diff)
			{
				std::cerr << "[" << tidx << "] DIFF '" << ti->diff << "' != '" << oi->diff << "'" << std::endl;
				throw std::runtime_error( "statistics message item diff does not match");
			}
		}
		if (g_errorhnd->hasError())
		{
			throw std::runtime_error( g_errorhnd->fetchError());
		}
		std::cerr << "processed blob of " << blobsize << " [uncompressed " << termsByteSize << "] bytes" << std::endl;
		std::cerr << "Ok [" << collection.termar.size() << "]" << std::endl;
		return 0;
	}
	catch (const std::runtime_error& e)
	{
		std::cerr << "ERROR " << e.what() << std::endl;
	}
	catch (const std::exception& e)
	{
		std::cerr << "EXCEPTION " << e.what() << std::endl;
	}
	return 4;
}