## 7 Strings

### 7.1 String

The `String` class provided the same functionality of the C++ string except for fewer constructors. It also inherits `OStream` so that you can write to it with the `<<` operator. It is defined in `string.hpp`.

### 7.2 ParmString

ParmString is a special string class that is designed to be used as a parameter for a function that is expecting a string. It is defined in `parm_string.hpp`. It will allow either a `const char *` or `String` class to be passed in. It will automatically convert to a `const char *`. The string can also be accessed via the `str` method. Usage example:

    void foo(ParmString s1, ParmString s2) {
       const char * str0 = s1;
       unsigned int size0 = s2.size()
       if (s1 == s2 || s2 == "bar") {
         ...
       }
    }
    ...
    String s1 = "...";
    foo(s1);
    const char * s2 = "...";
    foo(s2);

This class should be used when a string is being passed in as a parameter. It is faster than using `const String &` (as that will create an unnecessary temporary when a `const char *` is passed in), and is less annoying than using `const char *` (as it doesn't require the `c_str()` method to be used when a `String` is passed in).

### 7.3 CharVector

A character vector is basically a `Vector<char>` but it has a few additional methods for dealing with strings which `Vector` does not provide. It, like `String`, is also inherits `OStream` so that you can write to it with the `<<` operator. It is defined in `char_vector.hpp`. Use it when ever you need a string which is guaranteed to be in a continuous block of memory which you can write to.