Changeset 139


Ignore:
Timestamp:
Apr 30, 2007, 9:00:32 PM (18 years ago)
Author:
RBRi
Message:

more refactoring

Location:
trunk/NewView
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/NewView/CharUtilsUnit.pas

    r121 r139  
    1616  CharCR = chr(13);
    1717  CharLF = chr(10);
     18  CharSingleQuote = '''';
     19  CharDoubleQuote = '"';
    1820
    1921
  • trunk/NewView/StringUtilsUnit.pas

    r123 r139  
    1818  StrLF = CharLF;
    1919  StrCRLF = StrCR + StrLF;
    20   StrSingleQuote = '''';
    21   StrDoubleQuote = '"';
     20  StrSingleQuote = CharSingleQuote;
     21  StrDoubleQuote = CharDoubleQuote;
    2222
    2323
     
    3737  end;
    3838
    39   // prefices all occurences of one of the chars in aStringWithChars with anEscape char
     39  // prefixes all occurences of one of the chars in aStringWithChars with anEscape char
    4040  // if the escapeChar itself is found, then it is doubled
    4141  Function StrEscapeAllCharsBy(const aReceiver: String; const aSetOfChars: TSetOfChars; const anEscapeChar: char): String;
     
    9494  Function StrEndsWithIgnoringCase(const aReceiver: String; const anEndString: String): Boolean;
    9595
     96  // Returns true if aReceiver is only spaces (or empty)
     97  Function StrIsEmptyOrSpaces(const aReceiver: String) : Boolean;
     98
    9699  // returns true if the Strings are the same
    97100  // this is case INsensitive
     
    105108  Function BoolToStr(const aBoolean : boolean ): string;
    106109
     110  // Returns aString enclosed in single quotes
     111  Function StrInSingleQuotes(const aString : String) : String;
     112
    107113  // Returns aString enclosed in double quotes
    108114  Function StrInDoubleQuotes(const aString : String) : String;
     
    117123  Function CaseInsensitivePos(const aPart: String; const aString: String ): longint;
    118124
     125  // Finds the last position of aChar within aString. Returns zero if no match
     126  Function LastPosOfChar(const aChar: char; const aString: String): longint;
     127
    119128
    120129  // --------------------
     
    122131  // --------------------
    123132
    124  
     133
    125134  // removes all occurences of char from aSetOfChars from the beginning
    126135  // of a String.
     
    139148
    140149
     150  // --------------------
     151  // ---- Misc TODO  ----
     152  // --------------------
     153
     154  Procedure GetMemString(const aPointer : pointer; var aString: string; const aSize: byte);
     155
     156  Procedure FreePString(var aPString: PString );
     157
     158  Function NewPString(const aString : String) : PString;
    141159
    142160
     
    145163  uses
    146164    SysUtils,
    147     DebugUnit;
     165    DebugUnit,
     166    ACLUtility;  // TODO
    148167
    149168  constructor TSerializableStringList.Create;
     
    568587
    569588
     589  Function StrIsEmptyOrSpaces(const aReceiver: String) : Boolean;
     590  Begin
     591    Asm
     592      MOV ESI, aReceiver   // get address of aReceiver into ESI
     593      MOV CL,[ESI]     // get length of s
     594      MOVZX ECX, CL      // widen CL
     595      INC ECX
     596
     597    !IsSpacesLoop:
     598      INC ESI   // move to next char
     599      DEC ECX
     600      JE !IsSpacesTrue
     601
     602      MOV AL,[ESI] // load character
     603      CMP AL,32  // is it a space?
     604      JE !IsSpacesLoop // yes, go to next
     605
     606      // no, return false
     607      MOV EAX, 0
     608      JMP !IsSpacesDone
     609
     610    !IsSpacesTrue:
     611      MOV EAX, 1
     612
     613    !IsSpacesDone:
     614      LEAVE
     615      RETN32 4
     616    End;
     617  End;
     618
     619
    570620  Function StrEqualIgnoringCase(const aReceiver: String; const aSecondString: String): Boolean;
    571621  begin
     
    618668
    619669
     670  Function StrInSingleQuotes(const aString : String) : String;
     671  begin
     672    Result := StrSingleQuote + aString + StrSingleQuote;
     673  end;
     674
     675
    620676  Function StrInDoubleQuotes(const aString : String) : String;
    621677  begin
     
    866922
    867923
     924  Function LastPosOfChar(const aChar: char; const aString: String): longint;
     925  Var
     926    tmpPos : longint;
     927  begin
     928    tmpPos := Length(aString);
     929    while tmpPos > 0 do
     930    begin
     931      if aString[tmpPos] = aChar then
     932      begin
     933        Result := tmpPos;
     934        exit;
     935      end;
     936      dec(tmpPos);
     937    end;
     938    Result := 0;
     939  end;
     940
    868941  // --------------------
    869942  // ---- AnsiString ----
     
    9941067
    9951068
     1069  // --------------------
     1070  // ---- Misc TODO  ----
     1071  // --------------------
     1072
     1073  Procedure GetMemString(const aPointer : pointer; var aString: string; const aSize: byte);
     1074  begin
     1075    aString[0] := char(aSize);
     1076    MemCopy(aPointer, Addr(aString[1]), aSize);
     1077  end;
     1078
     1079
     1080  Procedure FreePString(var aPString : PString );
     1081  begin
     1082    if aPString = nil then
     1083    begin
     1084      exit;
     1085    end;
     1086
     1087    FreeMem(aPString, Length(aPString^) + 1);
     1088    aPString := nil;
     1089  end;
     1090
     1091
     1092  Function NewPString(const aString : String) : PString;
     1093  begin
     1094    GetMem(Result, Length(aString) + 1);
     1095    Result^ := aString;
     1096  end;
     1097
    9961098END.
  • trunk/NewView/unittests/StringUtilsUnitTests.pas

    r118 r139  
    280280
    281281
     282  PROCEDURE testEscapeAllCharsBy_NoCharactersToEscape;
     283  VAR
     284    tmpResult : String;
     285  BEGIN
     286    tmpResult := StrEscapeAllCharsBy('a\bc\\de', [], '\');
     287
     288    assertEqualsString('testEscapeAllCharsBy_NoCharactersToEscape', 'a\\bc\\\\de', tmpResult);
     289  END;
     290
     291
     292  PROCEDURE testEscapeAllCharsBy_DoubleDoubleQuotes;
     293  VAR
     294    tmpResult : String;
     295  BEGIN
     296    tmpResult := StrEscapeAllCharsBy('"ab cd"e', [], '"');
     297
     298    assertEqualsString('testEscapeAllCharsBy_DoubleDoubleQuotes', '""ab cd""e', tmpResult);
     299  END;
     300
     301
    282302  // ------------------------------------------------------
    283303
     
    13681388
    13691389
     1390  PROCEDURE testStrIsEmptyOrSpaces_Empty;
     1391  VAR
     1392    tmpResult : Boolean;
     1393  BEGIN
     1394    tmpResult := StrIsEmptyOrSpaces('');
     1395
     1396    assertTrue('testStrIsEmptyOrSpaces_Empty', tmpResult);
     1397  END;
     1398
     1399
     1400  PROCEDURE testStrIsEmptyOrSpaces_OneSpace;
     1401  VAR
     1402    tmpResult : Boolean;
     1403  BEGIN
     1404    tmpResult := StrIsEmptyOrSpaces(' ');
     1405
     1406    assertTrue('testStrIsEmptyOrSpaces_OneSpace', tmpResult);
     1407  END;
     1408
     1409
     1410  PROCEDURE testStrIsEmptyOrSpaces_ManySpaces;
     1411  VAR
     1412    tmpResult : Boolean;
     1413  BEGIN
     1414    tmpResult := StrIsEmptyOrSpaces('        ');
     1415
     1416    assertTrue('testStrIsEmptyOrSpaces_ManySpaces', tmpResult);
     1417  END;
     1418
     1419
     1420  PROCEDURE testStrIsEmptyOrSpaces_OneChar;
     1421  VAR
     1422    tmpResult : Boolean;
     1423  BEGIN
     1424    tmpResult := StrIsEmptyOrSpaces('a');
     1425
     1426    assertFalse('testStrIsEmptyOrSpaces_OneChar', tmpResult);
     1427  END;
     1428
     1429
     1430  PROCEDURE testStrIsEmptyOrSpaces_ManyChars;
     1431  VAR
     1432    tmpResult : Boolean;
     1433  BEGIN
     1434    tmpResult := StrIsEmptyOrSpaces('abcde');
     1435
     1436    assertFalse('testStrIsEmptyOrSpaces_ManyChars', tmpResult);
     1437  END;
     1438
     1439
     1440  PROCEDURE testStrIsEmptyOrSpaces_SpacesWithOneChar;
     1441  VAR
     1442    tmpResult : Boolean;
     1443  BEGIN
     1444    tmpResult := StrIsEmptyOrSpaces('       z     ');
     1445
     1446    assertFalse('testStrIsEmptyOrSpaces_SpacesWithOneChar', tmpResult);
     1447  END;
     1448
     1449
     1450  PROCEDURE testStrIsEmptyOrSpaces_CharZero;
     1451  VAR
     1452    tmpResult : Boolean;
     1453  BEGIN
     1454    tmpResult := StrIsEmptyOrSpaces(#0);
     1455
     1456    assertFalse('testStrIsEmptyOrSpaces_CharZero', tmpResult);
     1457  END;
     1458
     1459
     1460  // ----------------------------------------------------------
     1461
     1462
    13701463  PROCEDURE testStrEqualIgnoringCase_BothEmpty;
    13711464  VAR
     
    14751568
    14761569    assertEqualsString('testBoolToStr_false', 'False', tmpResult);
     1570  END;
     1571
     1572
     1573  // ----------------------------------------------------------
     1574
     1575
     1576  PROCEDURE testStrInSingleQuotes_Empty;
     1577  VAR
     1578    tmpResult : String;
     1579  BEGIN
     1580    tmpResult := StrInSingleQuotes('');
     1581
     1582    assertEqualsString('testStrInSingleQuotes_Empty', '''''', tmpResult);
     1583  END;
     1584
     1585
     1586  PROCEDURE testStrInSingleQuotes;
     1587  VAR
     1588    tmpResult : String;
     1589  BEGIN
     1590    tmpResult := StrInSingleQuotes('abc');
     1591
     1592    assertEqualsString('testStrInSingleQuotes', '''abc''', tmpResult);
    14771593  END;
    14781594
     
    18561972    tmpResult := CaseInsensitivePos(LowerCase(tmpPart), tmpString);
    18571973    assertEqualsInt('testCaseInsensitivePos', 1, tmpResult);
    1858 END;
     1974  END;
     1975
     1976
     1977
     1978  // -------------------------------------------------------------------
     1979
     1980
     1981  PROCEDURE testLastPosOfChar_Empty;
     1982  VAR
     1983    tmpResult : longint;
     1984  BEGIN
     1985    tmpResult := LastPosOfChar('x', '');
     1986
     1987    assertEqualsInt('testLastPosOfChar_Empty', 0, tmpResult);
     1988  END;
     1989
     1990
     1991  PROCEDURE testLastPosOfChar_NotFound;
     1992  VAR
     1993    tmpResult : longint;
     1994  BEGIN
     1995    tmpResult := LastPosOfChar('x', 'abcd');
     1996
     1997    assertEqualsInt('testLastPosOfChar_NotFound', 0, tmpResult);
     1998  END;
     1999
     2000
     2001  PROCEDURE testLastPosOfChar_OneCharNotFound;
     2002  VAR
     2003    tmpResult : longint;
     2004  BEGIN
     2005    tmpResult := LastPosOfChar('x', 'a');
     2006
     2007    assertEqualsInt('testLastPosOfChar_OneCharNotFound', 0, tmpResult);
     2008  END;
     2009
     2010
     2011  PROCEDURE testLastPosOfChar_OneCharFound;
     2012  VAR
     2013    tmpResult : longint;
     2014  BEGIN
     2015    tmpResult := LastPosOfChar('x', 'x');
     2016
     2017    assertEqualsInt('testLastPosOfChar_OneCharFound', 1, tmpResult);
     2018  END;
     2019
     2020
     2021  PROCEDURE testLastPosOfChar_OneCharWrongCase;
     2022  VAR
     2023    tmpResult : longint;
     2024  BEGIN
     2025    tmpResult := LastPosOfChar('x', 'X');
     2026
     2027    assertEqualsInt('testLastPosOfChar_OneCharWrongCase', 0, tmpResult);
     2028  END;
     2029
     2030
     2031  PROCEDURE testLastPosOfChar_FirstChar;
     2032  VAR
     2033    tmpResult : longint;
     2034  BEGIN
     2035    tmpResult := LastPosOfChar('x', 'xabcd');
     2036
     2037    assertEqualsInt('testLastPosOfChar_FirstChar', 1, tmpResult);
     2038  END;
     2039
     2040
     2041  PROCEDURE testLastPosOfChar_LastChar;
     2042  VAR
     2043    tmpResult : longint;
     2044  BEGIN
     2045    tmpResult := LastPosOfChar('x', 'abcdx');
     2046
     2047    assertEqualsInt('testLastPosOfChar_LastChar', 5, tmpResult);
     2048  END;
     2049
     2050
     2051  PROCEDURE testLastPosOfChar_MiddleChar;
     2052  VAR
     2053    tmpResult : longint;
     2054  BEGIN
     2055    tmpResult := LastPosOfChar('x', 'abcdxwertzu');
     2056
     2057    assertEqualsInt('testLastPosOfChar_MiddleChar', 5, tmpResult);
     2058  END;
     2059
     2060
     2061  PROCEDURE testLastPosOfChar_ManyHits;
     2062  VAR
     2063    tmpResult : longint;
     2064  BEGIN
     2065    tmpResult := LastPosOfChar('x', 'axbcxdxu');
     2066
     2067    assertEqualsInt('testLastPosOfChar_ManyHits', 7, tmpResult);
     2068  END;
    18592069
    18602070
     
    22272437    result.add(@testEscapeAllCharsBy_EmptyChars);
    22282438    result.add(@testEscapeAllCharsBy_EscapeEscape);
     2439    result.add(@testEscapeAllCharsBy_NoCharactersToEscape);
     2440    result.add(@testEscapeAllCharsBy_DoubleDoubleQuotes);
    22292441
    22302442    result.add(@testStrExtractStrings_EmptyReceiver);
     
    23392551    result.add(@testStrEndsWithIgnoringCase_StringMatchCaseInSensitive);
    23402552
     2553    result.add(@testStrIsEmptyOrSpaces_Empty);
     2554    result.add(@testStrIsEmptyOrSpaces_OneSpace);
     2555    result.add(@testStrIsEmptyOrSpaces_ManySpaces);
     2556    result.add(@testStrIsEmptyOrSpaces_OneChar);
     2557    result.add(@testStrIsEmptyOrSpaces_ManyChars);
     2558    result.add(@testStrIsEmptyOrSpaces_SpacesWithOneChar);
     2559    result.add(@testStrIsEmptyOrSpaces_CharZero);
     2560
    23412561    result.add(@testStrEqualIgnoringCase_BothEmpty);
    23422562    result.add(@testStrEqualIgnoringCase_FirstEmpty);
     
    23522572    result.add(@testBoolToStr_true);
    23532573    result.add(@testBoolToStr_false);
     2574
     2575    result.add(@testStrInSingleQuotes_Empty);
     2576    result.add(@testStrInSingleQuotes);
    23542577
    23552578    result.add(@testStrInDoubleQuotes_Empty);
     
    23812604    result.add(@testCaseInsensitivePos);
    23822605
     2606    result.add(@testLastPosOfChar_Empty);
     2607    result.add(@testLastPosOfChar_NotFound);
     2608    result.add(@testLastPosOfChar_OneCharNotFound);
     2609    result.add(@testLastPosOfChar_OneCharFound);
     2610    result.add(@testLastPosOfChar_OneCharWrongCase);
     2611    result.add(@testLastPosOfChar_FirstChar);
     2612    result.add(@testLastPosOfChar_LastChar);
     2613    result.add(@testLastPosOfChar_MiddleChar);
     2614    result.add(@testLastPosOfChar_ManyHits);
     2615
     2616
    23832617  // --------------------
    23842618  // ---- AnsiString ----
Note: See TracChangeset for help on using the changeset viewer.