@@ -541,13 +541,13 @@ namespace wiz {
541
541
class DoThread // need to rename!
542
542
{
543
543
private:
544
- string * strVec;
544
+ StringBuilder * strVec;
545
545
public:
546
546
ArrayQueue<Token>* aq;
547
547
// int strVecStart;
548
548
// int strVecEnd;
549
549
public:
550
- DoThread (string * strVec, ArrayQueue<Token>* aq) // , list<string>* aq)//, int strVecStart, int strVecEnd)
550
+ DoThread (StringBuilder * strVec, ArrayQueue<Token>* aq) // , list<string>* aq)//, int strVecStart, int strVecEnd)
551
551
: strVec(strVec), aq(aq) // , strVecStart(strVecStart), strVecEnd(strVecEnd)
552
552
{
553
553
//
@@ -561,11 +561,11 @@ namespace wiz {
561
561
// while (tokenizer.hasMoreTokens()) {
562
562
// aq.push(tokenizer.nextToken());
563
563
// }
564
- string statement = *strVec;
564
+ StringBuilder& statement = *strVec;
565
565
int token_first = 0 , token_last = 0 ; // idx of token in statement.
566
566
int state = 0 ;
567
567
568
- for (int i = 0 ; i < statement.size (); ++i) {
568
+ for (int i = 0 ; i < statement.Size (); ++i) {
569
569
if (0 == state && ' \" ' == statement[i]) {
570
570
// token_last = i - 1;
571
571
// if (token_last >= 0 && token_last - token_first + 1 > 0) {
@@ -580,68 +580,131 @@ namespace wiz {
580
580
}
581
581
else if (1 == state && ' \" ' == statement[i]) {
582
582
state = 0 ; token_last = i;
583
-
584
- // aq->emplace_back(statement.substr(token_first, token_last - token_first + 1));
585
- // token_first = i + 1;
586
583
}
587
584
588
585
if (0 == state && ' =' == statement[i]) {
589
586
token_last = i - 1 ;
590
587
if (token_last >= 0 && token_last - token_first + 1 > 0 ) {
591
- aq->push (Token (statement.substr (token_first, token_last - token_first + 1 ), false ));
588
+ statement.Divide (i);
589
+
590
+ aq->push (Token (string (statement.Str ()), false ));
591
+ statement.LeftShift (i + 1 );
592
+
593
+ aq->push (Token (" =" , false ));
594
+ token_first = 0 ;
595
+ token_last = 0 ;
596
+ i = -1 ;
597
+ }
598
+ else {
599
+ aq->push (Token (" =" , false ));
600
+ statement.LeftShift (1 );
601
+ token_first = 0 ;
602
+ i = -1 ;
592
603
}
593
- aq->push (Token (" =" , false ));
594
- token_first = i + 1 ;
595
604
}
596
605
else if (0 == state && isWhitespace (statement[i])) { // isspace ' ' \t \r \n , etc... ?
597
606
token_last = i - 1 ;
598
607
if (token_last >= 0 && token_last - token_first + 1 > 0 ) {
599
- aq->push (Token (statement.substr (token_first, token_last - token_first + 1 ), false ));
608
+ statement.Divide (i);
609
+
610
+ aq->push (Token (string (statement.Str ()), false ));
611
+
612
+ statement.LeftShift (i + 1 );
613
+
614
+ token_first = 0 ;
615
+ token_last = 0 ;
616
+ i = -1 ;
617
+ }
618
+ else
619
+ {
620
+ statement.LeftShift (1 );
621
+ token_first = 0 ;
622
+ i = -1 ;
600
623
}
601
- token_first = i + 1 ;
602
624
}
603
625
else if (0 == state && ' {' == statement[i]) {
604
626
token_last = i - 1 ;
605
627
if (token_last >= 0 && token_last - token_first + 1 > 0 ) {
606
- aq->push (Token (statement.substr (token_first, token_last - token_first + 1 ), false ));
628
+ statement.Divide (i);
629
+
630
+ aq->push (Token (string (statement.Str ()), false ));
631
+ statement.LeftShift (i + 1 );
632
+
633
+ aq->push (Token (" {" , false ));
634
+ token_first = 0 ;
635
+ token_last = 0 ;
636
+ i = -1 ;
637
+ }
638
+ else {
639
+ aq->push (Token (" {" , false ));
640
+ statement.LeftShift (1 );
641
+ token_first = 0 ;
642
+ i = -1 ;
607
643
}
608
- aq->push (Token (" {" , false ));
609
- token_first = i + 1 ;
610
644
}
611
645
else if (0 == state && ' }' == statement[i]) {
612
646
token_last = i - 1 ;
613
647
if (token_last >= 0 && token_last - token_first + 1 > 0 ) {
614
- aq->push (Token (statement.substr (token_first, token_last - token_first + 1 ), false ));
648
+ statement.Divide (i);
649
+
650
+
651
+ aq->push (Token (string (statement.Str ()), false ));
652
+ statement.LeftShift (i + 1 );
653
+
654
+ aq->push (Token (" }" , false ));
655
+
656
+ token_first = 0 ;
657
+ token_last = 0 ;
658
+ i = -1 ;
659
+ }
660
+ else {
661
+ aq->push (Token (" }" , false ));
662
+
663
+ statement.LeftShift (1 );
664
+ token_first = 0 ;
665
+ i = -1 ;
615
666
}
616
- aq->push (Token (" }" , false ));
617
- token_first = i + 1 ;
618
667
}
619
668
620
669
if (0 == state && ' #' == statement[i]) { // different from load_data_from_file
621
670
token_last = i - 1 ;
622
671
if (token_last >= 0 && token_last - token_first + 1 > 0 ) {
623
- aq->push (Token (statement.substr (token_first, token_last - token_first + 1 ), false ));
672
+ statement.Divide (i);
673
+ aq->push (Token (string (statement.Str ()), false ));
674
+ statement.LeftShift (i + 1 );
675
+ i = 0 ;
624
676
}
625
677
int j = 0 ;
626
- for (j = i; j < statement.size (); ++j) {
678
+ for (j = i; j < statement.Size (); ++j) {
627
679
if (statement[j] == ' \n ' ) // cf) '\r' ?
628
680
{
629
681
break ;
630
682
}
631
683
}
632
684
--j; // "before enter key" or "before end"
633
-
685
+
634
686
if (j - i + 1 > 0 ) {
635
- aq->push (Token (statement.substr (i, j - i + 1 ), true ));
687
+ statement.Divide (j + 1 );
688
+
689
+ aq->push (Token (string (statement.Str ()), true ));
690
+ statement.LeftShift (j + 2 );
691
+
692
+ token_first = 0 ;
693
+ token_last = 0 ;
694
+ i = -1 ;
695
+ }
696
+ else {
697
+ statement.LeftShift (j + 2 );
698
+ token_first = 0 ;
699
+ token_last = 0 ;
700
+ i = -1 ;
636
701
}
637
- token_first = j + 2 ;
638
- i = token_first - 1 ;
639
702
}
640
703
}
641
704
642
- if (token_first < statement.size ())
705
+ if (token_first < statement.Size ())
643
706
{
644
- aq->push (Token (statement.substr (token_first ), false ));
707
+ aq->push (Token (string ( statement.Str () ), false ));
645
708
}
646
709
}
647
710
}
@@ -656,7 +719,7 @@ namespace wiz {
656
719
// }
657
720
};
658
721
public:
659
- static bool Reserve3 (ifstream& inFile, vector<string> & strVecTemp, const int min_num = 1 )
722
+ static bool Reserve3 (ifstream& inFile, StringBuilder & strVecTemp, const int min_num = 1 )
660
723
{
661
724
int count = 0 ;
662
725
string temp;
@@ -665,7 +728,8 @@ namespace wiz {
665
728
666
729
for (int i = 0 ; i < min_num && (getline (inFile, temp)); ++i) {
667
730
if (temp.empty ()) { continue ; }
668
- strVecTemp.push_back (temp);
731
+ strVecTemp.Append (temp.c_str (), temp.size ());
732
+ strVecTemp.AppendChar (' \n ' );
669
733
for (int j = 0 ; j < temp.size (); ++j) {
670
734
if (temp[j] == ' {' ) {
671
735
brace++;
@@ -679,7 +743,7 @@ namespace wiz {
679
743
680
744
while (brace != 0 && getline (inFile, temp)) {
681
745
if (temp.empty ()) { continue ; }
682
- strVecTemp.push_back (temp);
746
+ strVecTemp.Append (temp. c_str (), temp. size () );
683
747
for (int j = 0 ; j < temp.size (); ++j) {
684
748
if (temp[j] == ' {' ) {
685
749
brace++;
@@ -698,18 +762,16 @@ namespace wiz {
698
762
{
699
763
int count = 0 ;
700
764
string temp;
701
- wiz::StringBuilder builder (1024 * num); // vector<string> strVecTemp;
765
+ wiz::StringBuilder builder (128 * num); // vector<string> strVecTemp;
702
766
703
767
for (int i = 0 ; i < num && (getline (inFile, temp)); ++i) {
704
768
if (temp.empty ()) { continue ; }
705
769
builder.Append (temp.c_str (), temp.size ());
706
770
builder.AppendChar (' \n ' );
707
771
count++;
708
772
}
709
-
710
- string str (builder.Str ());
711
773
712
- DoThread doThread (&str , &aq);
774
+ DoThread doThread (&builder , &aq);
713
775
714
776
doThread (); // (0, count - 1);
715
777
0 commit comments