1 /*
2 *******************************************************************************
3 *
4 *   Copyright (C) 1999-2011, International Business Machines
5 *   Corporation and others.  All Rights Reserved.
6 *
7 *******************************************************************************
8 *   file name:  unistr_props.cpp
9 *   encoding:   US-ASCII
10 *   tab size:   8 (not used)
11 *   indentation:2
12 *
13 *   created on: 2004aug25
14 *   created by: Markus W. Scherer
15 *
16 *   Character property dependent functions moved here from unistr.cpp
17 */
18 
19 #include "unicode/utypes.h"
20 #include "unicode/uchar.h"
21 #include "unicode/unistr.h"
22 #include "unicode/utf16.h"
23 
24 U_NAMESPACE_BEGIN
25 
26 UnicodeString&
trim()27 UnicodeString::trim()
28 {
29   if(isBogus()) {
30     return *this;
31   }
32 
33   UChar *array = getArrayStart();
34   UChar32 c;
35   int32_t oldLength = this->length();
36   int32_t i = oldLength, length;
37 
38   // first cut off trailing white space
39   for(;;) {
40     length = i;
41     if(i <= 0) {
42       break;
43     }
44     U16_PREV(array, 0, i, c);
45     if(!(c == 0x20 || u_isWhitespace(c))) {
46       break;
47     }
48   }
49   if(length < oldLength) {
50     setLength(length);
51   }
52 
53   // find leading white space
54   int32_t start;
55   i = 0;
56   for(;;) {
57     start = i;
58     if(i >= length) {
59       break;
60     }
61     U16_NEXT(array, i, length, c);
62     if(!(c == 0x20 || u_isWhitespace(c))) {
63       break;
64     }
65   }
66 
67   // move string forward over leading white space
68   if(start > 0) {
69     doReplace(0, start, 0, 0, 0);
70   }
71 
72   return *this;
73 }
74 
75 U_NAMESPACE_END
76