the endless quest to plug memory leaks -- episode 379
[ardour.git] / libs / pbd / whitespace.cc
1 /*
2     Copyright (C) 2000-2007 Paul Davis
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 */
19
20 #include "pbd/whitespace.h"
21
22 using namespace std;
23
24 namespace PBD {
25
26 void
27 strip_whitespace_edges (string& str)
28 {
29     string::size_type i;
30     string::size_type len;
31     string::size_type s = 0;
32
33     len = str.length();
34
35     if (len == 1) {
36             return;
37     }
38
39     /* strip front */
40
41     for (i = 0; i < len; ++i) {
42         if (!isspace (str[i])) {
43             break;
44         }
45     }
46
47     if (i == len) {
48             /* it's all whitespace, not much we can do */
49                 str = "";
50             return;
51     }
52
53     /* strip back */
54
55     if (len > 1) {
56
57             s = i;
58             i = len - 1;
59
60             if (s == i) {
61                     return;
62             }
63
64             do {
65                     if (!isspace (str[i]) || i == 0) {
66                             break;
67                     }
68
69                     --i;
70
71             } while (true);
72
73             str = str.substr (s, (i - s) + 1);
74
75     } else {
76             str = str.substr (s);
77     }
78 }
79
80 } // namespace PBD