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; }
void CGridDlg::OnEnChangeEditHorizontalCount() { if(m_changeHandlerActive) return; m_changeHandlerActive = true; UINT value; if(getUintValue(IDC_EDITHORIZONTALCOUNT, value)) { setHorizontalCount(value); } m_changeHandlerActive = false; }
void CGridDlg::OnEnChangeEditVerticalCount() { if(m_changeHandlerActive) return; m_changeHandlerActive = true; UINT value; if(getUintValue(IDC_EDITVERTICALCOUNT, value)) { setVerticalCount(value); } m_changeHandlerActive = false; }
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; }