3 - Decide: do I really want to define |Equals| (i.e., so many extra signatures)
5 . Make |ns[C]String| rename its converting operations to, e.g., |EqualsWithConversion|,
6 |AssignWithConversion|, |CompareWithConversion|, |AppendWithConversion|, etc.
8 . Bring |Equals| and |Compare| into scope
10 . Implement chunky iterators
12 . Get "nsAReadableString.h" and "nsAWritableString.h" to added to the MANIFEST, etc.
14 - Get "nsAReadableString.h" and "nsAWritableString.h" to compile everywhere
16 - Add test for |Replace|...
18 - Add tests for Find and RFind
20 - Implement the Find and RFind signatures
22 . Fix Truncate / SetLength confusion (make SetLength the real function in |nsString|)
24 . Chop out conflicting |ns[C]String| operators
26 . Figure out how if we can make PRUnichar be wchar_t, so we get the cheap constructors,
27 ...and ensure the cheap constructors can be made to work everywhere
29 x Try the |static const unsigned long kLeftString = 1 - 1; /* because VC++ doesn't like =0 */| hack
31 . Add tests for |nsShared[C]String|
33 . Implement |nsShared[C]String|
35 - Add tests for the shared string smart pointer
37 . Implement the shared string smart pointer
39 . Figure out why StdStringWrapper isn't as good as raw std::string
41 - Implement a smart allocator for StdStringWrapper