int main(int argc, char *argv[]) { std::string procName = "PrintTable"; if (argc == 1) { printHelp(procName); return -1; } bool bWasError = false; LoginParams *loginParams = new LoginParams(argc, argv); SampleParams *sampleParams = new SampleParams(argc, argv); printSampleParams(procName, loginParams, sampleParams); if (!checkObligatoryParams(loginParams, sampleParams)) return -1; IO2GSession *session = CO2GTransport::createSession(); session->useTableManager(Yes, 0); SessionStatusListener *sessionListener = new SessionStatusListener(session, true, loginParams->getSessionID(), loginParams->getPin()); session->subscribeSessionStatus(sessionListener); bool bConnected = login(session, sessionListener, loginParams); if (bConnected) { bool bIsAccountEmpty = !sampleParams->getAccount() || strlen(sampleParams->getAccount()) == 0; O2G2Ptr<IO2GTableManager> tableManager = session->getTableManager(); O2GTableManagerStatus managerStatus = tableManager->getStatus(); while (managerStatus == TablesLoading) { Sleep(50); managerStatus = tableManager->getStatus(); } if (managerStatus == TablesLoadFailed) { std::cout << "Cannot refresh all tables of table manager" << std::endl; } O2G2Ptr<IO2GAccountRow> account = getAccount(tableManager, sampleParams->getAccount()); if (account) { if (bIsAccountEmpty) { sampleParams->setAccount(account->getAccountID()); std::cout << "Account: " << sampleParams->getAccount() << std::endl; } } else { std::cout << "No valid accounts" << std::endl; bWasError = true; } printOrders(tableManager, sampleParams->getAccount()); std::cout << "Done!" << std::endl; logout(session, sessionListener); } else { bWasError = true; } session->unsubscribeSessionStatus(sessionListener); sessionListener->release(); session->release(); if (bWasError) return -1; return 0; }
void SSearchTest::offsetTest() { const char *test[] = { // The sequence \u0FB3\u0F71\u0F71\u0F80 contains a discontiguous // contraction (\u0FB3\u0F71\u0F80) logically followed by \u0F71. "\\u1E33\\u0FB3\\u0F71\\u0F71\\u0F80\\uD835\\uDF6C\\u01B0", "\\ua191\\u16ef\\u2036\\u017a", #if 0 // This results in a complex interaction between contraction, // expansion and normalization that confuses the backwards offset fixups. "\\u0F7F\\u0F80\\u0F81\\u0F82\\u0F83\\u0F84\\u0F85", #endif "\\u0F80\\u0F81\\u0F82\\u0F83\\u0F84\\u0F85", "\\u07E9\\u07EA\\u07F1\\u07F2\\u07F3", "\\u02FE\\u02FF" "\\u0300\\u0301\\u0302\\u0303\\u0304\\u0305\\u0306\\u0307\\u0308\\u0309\\u030A\\u030B\\u030C\\u030D\\u030E\\u030F" "\\u0310\\u0311\\u0312\\u0313\\u0314\\u0315\\u0316\\u0317\\u0318\\u0319\\u031A\\u031B\\u031C\\u031D\\u031E\\u031F" "\\u0320\\u0321\\u0322\\u0323\\u0324\\u0325\\u0326\\u0327\\u0328\\u0329\\u032A\\u032B\\u032C\\u032D\\u032E\\u032F" "\\u0330\\u0331\\u0332\\u0333\\u0334\\u0335\\u0336\\u0337\\u0338\\u0339\\u033A\\u033B\\u033C\\u033D\\u033E\\u033F" "\\u0340\\u0341\\u0342\\u0343\\u0344\\u0345\\u0346\\u0347\\u0348\\u0349\\u034A\\u034B\\u034C\\u034D\\u034E", // currently not working, see #8081 "\\u02FE\\u02FF\\u0300\\u0301\\u0302\\u0303\\u0316\\u0317\\u0318", // currently not working, see #8081 "a\\u02FF\\u0301\\u0316", // currently not working, see #8081 "a\\u02FF\\u0316\\u0301", "a\\u0430\\u0301\\u0316", "a\\u0430\\u0316\\u0301", "abc\\u0E41\\u0301\\u0316", "abc\\u0E41\\u0316\\u0301", "\\u0E41\\u0301\\u0316", "\\u0E41\\u0316\\u0301", "a\\u0301\\u0316", "a\\u0316\\u0301", "\\uAC52\\uAC53", "\\u34CA\\u34CB", "\\u11ED\\u11EE", "\\u30C3\\u30D0", "p\\u00E9ch\\u00E9", "a\\u0301\\u0325", "a\\u0300\\u0325", "a\\u0325\\u0300", "A\\u0323\\u0300B", "A\\u0300\\u0323B", "A\\u0301\\u0323B", "A\\u0302\\u0301\\u0323B", "abc", "ab\\u0300c", "ab\\u0300\\u0323c", " \\uD800\\uDC00\\uDC00", "a\\uD800\\uDC00\\uDC00", "A\\u0301\\u0301", "A\\u0301\\u0323", "A\\u0301\\u0323B", "B\\u0301\\u0323C", "A\\u0300\\u0323B", "\\u0301A\\u0301\\u0301", "abcd\\r\\u0301", "p\\u00EAche", "pe\\u0302che", }; int32_t testCount = ARRAY_SIZE(test); UErrorCode status = U_ZERO_ERROR; RuleBasedCollator *col = (RuleBasedCollator *) Collator::createInstance(Locale::getEnglish(), status); if (U_FAILURE(status)) { errcheckln(status, "Failed to create collator in offsetTest! - %s", u_errorName(status)); return; } char buffer[4096]; // A bit of a hack... just happens to be long enough for all the test cases... // We could allocate one that's the right size by (CE_count * 10) + 2 // 10 chars is enough room for 8 hex digits plus ", ". 2 extra chars for "[" and "]" col->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status); for(int32_t i = 0; i < testCount; i += 1) { if (i>=4 && i<=6 && logKnownIssue("9156", "was 8081")) { continue; // timebomb until ticket #9156 (was #8081) is resolved } UnicodeString ts = CharsToUnicodeString(test[i]); CollationElementIterator *iter = col->createCollationElementIterator(ts); OrderList forwardList; OrderList backwardList; int32_t order, low, high; do { low = iter->getOffset(); order = iter->next(status); high = iter->getOffset(); forwardList.add(order, low, high); } while (order != CollationElementIterator::NULLORDER); iter->reset(); iter->setOffset(ts.length(), status); backwardList.add(CollationElementIterator::NULLORDER, iter->getOffset(), iter->getOffset()); do { high = iter->getOffset(); order = iter->previous(status); low = iter->getOffset(); if (order == CollationElementIterator::NULLORDER) { break; } backwardList.add(order, low, high); } while (TRUE); backwardList.reverse(); if (forwardList.compare(backwardList)) { logln("Works with \"%s\"", test[i]); logln("Forward offsets: [%s]", printOffsets(buffer, forwardList)); // logln("Backward offsets: [%s]", printOffsets(buffer, backwardList)); logln("Forward CEs: [%s]", printOrders(buffer, forwardList)); // logln("Backward CEs: [%s]", printOrders(buffer, backwardList)); logln(); } else { errln("Fails with \"%s\"", test[i]); infoln("Forward offsets: [%s]", printOffsets(buffer, forwardList)); infoln("Backward offsets: [%s]", printOffsets(buffer, backwardList)); infoln("Forward CEs: [%s]", printOrders(buffer, forwardList)); infoln("Backward CEs: [%s]", printOrders(buffer, backwardList)); infoln(); } delete iter; } delete col; }
int main(int argc, char *argv[]) { // erstelle irgendwelche rabatte int i, i1; for(i = 0; i < x; i++) { for(i1 = 0; i1 < y; i1++) { discounts[i][i1] = rand() % 100; } } while(option != 3) { printf("\nOptionen:\n"); printf("1: Neue Produkte eingeben\n"); printf("2: Neue Kunden eingeben\n"); printf("3: Beenden\n\n"); printf("Weitere Optionen\n"); printf("4: Alle Produkte auflisten\n"); printf("5: Alle Personen auflisten\n"); printf("6: Alle Aufträge auflisten\n"); printf("7: Neuen Auftrag anlegen\n"); printf("8: Auftrag bearbeiten\n"); printf("9: Auftrag löschen\n"); printf("10: Person bearbeiten\n"); printf("11: Produkt bearbeiten\n"); printf("12: Nach Produkt suchen\n"); printf("13: Nach Kunde suchen\n"); printf("14. Rekusiver Warenwert\n"); printf("15. Iterativer Warenwert\n"); printf("16. Rabattliste"); printf("\nAuswahl: "); scanf("%i", &option); Order o; Product p; Customer c; switch(option) { case 1: while(decision != 'n') { p = newProduct(); getchar(); printf("Wollen Sie noch einen Eintrag erstellen (j/n)?\n"); scanf("%c", &decision); if(max_products == p.id + 1) resizeProductArray(&product, &max_products); product[p.id] = p; productIndex++; } decision = 'j'; break; case 2: while(decision != 'n') { Customer c = newCustomer(); getchar(); printf("Wollen Sie noch einen Eintrag erstellen (j/n)?\n"); scanf("%c", &decision); if(max_customer == c.id + 1) resizeCustomerArray(&customer, &max_customer); customer[c.id] = c; customerIndex++; } decision = 'j'; break; case 3: printf("\nBeendet..\n"); break; case 4: printProducts(product, productIndex); break; case 5: printCustomer(customer, customerIndex); break; case 6: printOrders(order, orderIndex); break; case 7: o = newOrder(); if(max_order == c.id + 1) resizeOrderArray(&order, &max_order); order[o.id] = o; orderIndex++; break; case 8: // auftrag bearbeiten break; case 9: // auftrag loeschen break; case 10: c = searchCustomer(customer, customerIndex); c = editCustomer(c); customer[c.id] = c; break; case 11: p = searchProduct(product, productIndex); p = editProduct(p); product[p.id] = p; break; case 12: p = searchProduct(product, productIndex); printf("\nArtikelnummer: %i\n", p.id+1); printf("Artikelname: %s\n", p.name); printf("Artikelpreis: %0.2f\n", p.price); printf("Lagerbestand: %i\n", p.amount); break; case 13: c = searchCustomer(customer, customerIndex); printf("\nKundennummer: %i\n", c.id); printf("Kundenname: %s\n", c.name); break; case 14: printf("\nAktueller Warenwert: "); printf("%0.2f Euro (rekursiv)\n", recursiveProductValue(product, productIndex-1)); break; case 15: printf("\nAktueller Warenwert: "); printf("%0.2f Euro (iterativ)\n", iterativeProductValue(product, productIndex-1)); break; case 16: printf("Produkt/Anzahl"); for(i = 0; i < x; i++) { for(i1 = 0; i1 < y; i1++) { printf("[%02i]", discounts[i][i1]); } printf("\n"); } break; default: break; } } }