]> git.donarmstrong.com Git - lilypond.git/blob - flower/std-string.cc
53fd548bfa340f422fc6cce872f6ed590ceb967f
[lilypond.git] / flower / std-string.cc
1 /*
2   std-string.cc -- implement external interface for Std_String
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2006--2009  Jan Nieuwenhuizen <janneke@gnu.org>
7 */
8
9 #include "std-string.hh"
10 #include "string-convert.hh"
11
12 string
13 to_string (string s)
14 {
15   return s;
16 }
17
18 string
19 to_string (char c, int n)
20 {
21   return string (max (n, 0), c);
22 }
23
24 string
25 to_string (double f, char const *format)
26 {
27   return String_convert::double_string (f, format);
28 }
29
30 string
31 to_string (int i, char const *format)
32 {
33   return String_convert::int_string (i, format);
34 }
35
36 string
37 to_string (bool b)
38 {
39   return String_convert::bool_string (b);
40 }
41
42 string
43 to_string (long b)
44 {
45   return String_convert::long_string (b);
46 }
47
48 string
49 to_string (long unsigned b)
50 {
51   return String_convert::unsigned_string (b);
52 }
53
54 string
55 to_string (unsigned u)
56 {
57   return String_convert::unsigned_string (u);
58 }
59
60 string
61 to_string (I64 b, char const *format)
62 {
63   return String_convert::i64_string (b, format);
64 }
65
66 string
67 to_string (char const *format, ...)
68 {
69   va_list args;
70   va_start (args, format);
71   string str = String_convert::vform_string (format, args);
72   va_end (args);
73   return str;
74 }
75
76 /*
77   TODO: this O(n^2) in #occurences of find, due to repeated copying.
78  */
79 string &
80 replace_all (string *str, string const &find, string const &replace)
81 {
82   ssize len = find.length ();
83   ssize replen = replace.length ();
84   for (ssize i = str->find (find); i != NPOS; i = str->find (find, i + replen))
85     *str = str->replace (i, len, replace);
86   return *str;
87 }
88
89 string &
90 replace_all (string *str, char find, char replace)
91 {
92   for (ssize i = str->find (find); i != NPOS; i = str->find (find, i + 1))
93     (*str)[i] = replace;
94   return *str;
95 }
96
97 char *
98 string_copy (string s)
99 {
100   ssize len = s.length ();
101   char *dest = new char[len + 1];
102   copy (s.begin (), s.end (), dest);
103   dest[len] = 0;
104   
105   return dest;
106 }
107
108 int
109 string_compare (string const &a, string const &b)
110 {
111   return a.compare (b);
112 }
113
114 #include "std-vector.hh"
115
116 vector<string>
117 string_split (string str, char c)
118 {
119   ssize i = str.find (c);
120
121   vector<string> a;
122   while (i != NPOS)
123     {
124       string s = str.substr (0, i);
125       a.push_back (s);
126       i ++;
127       str = str.substr (i);
128       i = str.find (c);
129     }
130   if (str.length ())
131     a.push_back (str);
132   return a;
133 }
134
135 string
136 string_join (vector<string> const &strs, string infix)
137 {
138   string result;
139   for (vsize i = 0; i < strs.size (); i ++)
140     {
141       if (i)
142         result += infix;
143       result += strs[i];
144     }
145
146   return result;
147 }