lilypond-0.1.12
[lilypond.git] / flower / stringhandle.hh
blobdf92e5021602d5ebd62baa6efbed9d394995c162
1 /*
2 stringhandle.hh -- declare String_handle
4 source file of the LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
10 #ifndef STRINGHANDLE_HH
11 #define STRINGHANDLE_HH
12 #include "fproto.hh"
15 /**
16 Reference counting for strings.
18 handles ref. counting, and provides a very thin interface using
19 Byte *
22 class String_handle {
23 String_data* data;
25 /// decrease ref count. Named kind of like a Tanenbaum semafore
26 void down();
28 /// increase ref count
29 void up(String_data *d);
31 /** make sure data has only one reference.
32 POST: data->references == 1
34 void copy();
36 public:
37 String_handle();
38 ~String_handle();
39 String_handle(String_handle const & src);
41 Byte const* byte_c_l() const;
42 char const* ch_c_l() const;
43 Byte* byte_l();
44 char* ch_l();
46 void operator =(String_handle const &src);
47 void operator += (char const *s);
48 Byte operator[](int j) const;
50 /** Access elements. WARNING: NOT SAFE
51 don't use this for loops. Use byte_c_l()
53 Byte &operator[](int j);
54 void append( Byte const* byte_c_l, int length_i );
55 void set( Byte const* byte_c_l, int length_i );
56 void operator = (char const *p);
57 void trunc(int j);
58 int length_i() const;
61 #ifdef STRING_UTILS_INLINED
62 #ifndef INLINE
63 #define INLINE inline
64 #endif
65 #include "stringhandle.inl"
66 /* we should be resetting INLINE. oh well. */
67 #endif
70 #endif // STRINGHANDLE_HH