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