1 /*
2 *******************************************************************************
3 *
4 * Copyright (C) 1999-2007, 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
23 U_NAMESPACE_BEGIN
24
25 UnicodeString&
trim()26 UnicodeString::trim()
27 {
28 if(isBogus()) {
29 return *this;
30 }
31
32 UChar *array = getArrayStart();
33 UChar32 c;
34 int32_t oldLength = this->length();
35 int32_t i = oldLength, length;
36
37 // first cut off trailing white space
38 for(;;) {
39 length = i;
40 if(i <= 0) {
41 break;
42 }
43 U16_PREV(array, 0, i, c);
44 if(!(c == 0x20 || u_isWhitespace(c))) {
45 break;
46 }
47 }
48 if(length < oldLength) {
49 setLength(length);
50 }
51
52 // find leading white space
53 int32_t start;
54 i = 0;
55 for(;;) {
56 start = i;
57 if(i >= length) {
58 break;
59 }
60 U16_NEXT(array, i, length, c);
61 if(!(c == 0x20 || u_isWhitespace(c))) {
62 break;
63 }
64 }
65
66 // move string forward over leading white space
67 if(start > 0) {
68 doReplace(0, start, 0, 0, 0);
69 }
70
71 return *this;
72 }
73
74 U_NAMESPACE_END
75