Example #1
0
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;
}
Example #2
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;
}
Example #3
0
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;
		}
	}
}