+/* Mutators.
+ Functions that advance the beginning of a string should not be
+ used if a substring is to be deallocated. */
+void ss_swap (struct substring *, struct substring *);
+void ss_truncate (struct substring *, size_t);
+size_t ss_rtrim (struct substring *, struct substring trim_set);
+size_t ss_ltrim (struct substring *, struct substring trim_set);
+void ss_trim (struct substring *, struct substring trim_set);
+bool ss_chomp_byte (struct substring *, char);
+bool ss_chomp (struct substring *, struct substring);
+bool ss_separate (struct substring src, struct substring delimiters,
+ size_t *save_idx, struct substring *token);
+bool ss_tokenize (struct substring src, struct substring delimiters,
+ size_t *save_idx, struct substring *token);
+void ss_advance (struct substring *, size_t);
+bool ss_match_byte (struct substring *, char);
+int ss_match_byte_in (struct substring *, struct substring);
+bool ss_match_string (struct substring *, const struct substring);
+bool ss_match_string_case (struct substring *, const struct substring);
+int ss_get_byte (struct substring *);
+size_t ss_get_bytes (struct substring *, size_t n, struct substring *);
+bool ss_get_until (struct substring *, char delimiter, struct substring *);
+size_t ss_get_long (struct substring *, long *);