|
28 | 28 | #include "ssearch.h"
|
29 | 29 | #include "xmlparser.h"
|
30 | 30 |
|
| 31 | +#include <iomanip> |
| 32 | +#include <iostream> |
| 33 | +#include <sstream> |
31 | 34 | #include <stdio.h> // for snprintf
|
32 | 35 |
|
33 | 36 | char testId[100];
|
@@ -524,40 +527,48 @@ UBool OrderList::matchesAt(int32_t offset, const OrderList &other) const
|
524 | 527 | return true;
|
525 | 528 | }
|
526 | 529 |
|
527 |
| -static char *printOffsets(char *buffer, size_t n, OrderList &list) |
| 530 | +static char* printOffsets(std::string &buffer, OrderList &list) |
528 | 531 | {
|
529 | 532 | int32_t size = list.size();
|
530 |
| - char *s = buffer; |
| 533 | + buffer.clear(); |
| 534 | + buffer.reserve(size * 10 + 2); |
| 535 | + std::stringstream s(buffer); |
531 | 536 |
|
532 | 537 | for(int32_t i = 0; i < size; i += 1) {
|
533 | 538 | const Order *order = list.get(i);
|
534 | 539 |
|
535 | 540 | if (i != 0) {
|
536 |
| - s += snprintf(s, n, ", "); |
| 541 | + s << ", "; |
537 | 542 | }
|
538 | 543 |
|
539 |
| - s += snprintf(s, n, "(%d, %d)", order->lowOffset, order->highOffset); |
| 544 | + s << "(" << order->lowOffset << ", " << order->highOffset << ")"; |
540 | 545 | }
|
541 | 546 |
|
542 |
| - return buffer; |
| 547 | + return buffer.data(); |
543 | 548 | }
|
544 | 549 |
|
545 |
| -static char *printOrders(char *buffer, size_t n, OrderList &list) |
| 550 | +static char* printOrders(std::string &buffer, OrderList &list) |
546 | 551 | {
|
547 | 552 | int32_t size = list.size();
|
548 |
| - char *s = buffer; |
| 553 | + buffer.clear(); |
| 554 | + // 10 chars is enough room for 8 hex digits plus ", " |
| 555 | + buffer.reserve(size * 10 + 2); |
| 556 | + std::stringstream s(buffer); |
549 | 557 |
|
550 | 558 | for(int32_t i = 0; i < size; i += 1) {
|
551 | 559 | const Order *order = list.get(i);
|
552 | 560 |
|
553 | 561 | if (i != 0) {
|
554 |
| - s += snprintf(s, n, ", "); |
| 562 | + s << ", "; |
555 | 563 | }
|
556 | 564 |
|
557 |
| - s += snprintf(s, n, "%8.8X", order->order); |
| 565 | + s << std::hex |
| 566 | + << std::uppercase |
| 567 | + << std::setw(8) |
| 568 | + << std::setfill('0') |
| 569 | + << order->order; |
558 | 570 | }
|
559 |
| - |
560 |
| - return buffer; |
| 571 | + return buffer.data(); |
561 | 572 | }
|
562 | 573 |
|
563 | 574 | void SSearchTest::offsetTest()
|
@@ -631,9 +642,7 @@ void SSearchTest::offsetTest()
|
631 | 642 | errcheckln(status, "Failed to create collator in offsetTest! - %s", u_errorName(status));
|
632 | 643 | return;
|
633 | 644 | }
|
634 |
| - char buffer[4096]; // A bit of a hack... just happens to be long enough for all the test cases... |
635 |
| - // We could allocate one that's the right size by (CE_count * 10) + 2 |
636 |
| - // 10 chars is enough room for 8 hex digits plus ", ". 2 extra chars for "[" and "]" |
| 645 | + std::string buffer; |
637 | 646 |
|
638 | 647 | col->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status);
|
639 | 648 |
|
@@ -673,20 +682,20 @@ void SSearchTest::offsetTest()
|
673 | 682 |
|
674 | 683 | if (forwardList.compare(backwardList)) {
|
675 | 684 | logln("Works with \"%s\"", test[i]);
|
676 |
| - logln("Forward offsets: [%s]", printOffsets(buffer, sizeof(buffer), forwardList)); |
677 |
| -// logln("Backward offsets: [%s]", printOffsets(buffer, sizeof(buffer), backwardList)); |
| 685 | + logln("Forward offsets: [%s]", printOffsets(buffer, forwardList)); |
| 686 | +// logln("Backward offsets: [%s]", printOffsets(buffer, backwardList)); |
678 | 687 |
|
679 |
| - logln("Forward CEs: [%s]", printOrders(buffer, sizeof(buffer), forwardList)); |
680 |
| -// logln("Backward CEs: [%s]", printOrders(buffer, sizeof(buffer), backwardList)); |
| 688 | + logln("Forward CEs: [%s]", printOrders(buffer, forwardList)); |
| 689 | +// logln("Backward CEs: [%s]", printOrders(buffer, backwardList)); |
681 | 690 |
|
682 | 691 | logln();
|
683 | 692 | } else {
|
684 | 693 | errln("Fails with \"%s\"", test[i]);
|
685 |
| - infoln("Forward offsets: [%s]", printOffsets(buffer, sizeof(buffer), forwardList)); |
686 |
| - infoln("Backward offsets: [%s]", printOffsets(buffer, sizeof(buffer), backwardList)); |
| 694 | + infoln("Forward offsets: [%s]", printOffsets(buffer, forwardList)); |
| 695 | + infoln("Backward offsets: [%s]", printOffsets(buffer, backwardList)); |
687 | 696 |
|
688 |
| - infoln("Forward CEs: [%s]", printOrders(buffer, sizeof(buffer), forwardList)); |
689 |
| - infoln("Backward CEs: [%s]", printOrders(buffer, sizeof(buffer), backwardList)); |
| 697 | + infoln("Forward CEs: [%s]", printOrders(buffer, forwardList)); |
| 698 | + infoln("Backward CEs: [%s]", printOrders(buffer, backwardList)); |
690 | 699 |
|
691 | 700 | infoln();
|
692 | 701 | }
|
|
0 commit comments