String Views ============ .. default-domain:: c .. highlight:: c For performance reasons, many functions in serd that take a string take a ``ZixStringView``, rather than a bare pointer. This forces code to be explicit about string measurement, which discourages common patterns of repeated measurement of the same string. Since a string view interface is a useful abstraction to share across several libraries, Serd uses the string view interface of its dependency, `Zix `_. For convenience, several constructors are provided: ``zix_empty_string`` Constructs a view of an empty string, for example: .. literalinclude:: overview_code.c :start-after: begin make-empty-string :end-before: end make-empty-string :dedent: 2 ``zix_string`` Constructs a view of an arbitrary string, for example: .. literalinclude:: overview_code.c :start-after: begin measure-string :end-before: end measure-string :dedent: 2 This calls ``strlen`` to measure the string. Modern compilers should optimize this away if the parameter is a literal. ``zix_substring`` Constructs a view of a slice of a string with an explicit length, for example: .. literalinclude:: overview_code.c :start-after: begin make-string-view :end-before: end make-string-view :dedent: 2 This can also be used to create a view of a pre-measured string. If the length a dynamic string is already known, this is faster than ``serd_string``, since it avoids redundant measurement. These constructors can be used inline when passing parameters, but if the same dynamic string is used several times, it is better to make a string view variable to avoid redundant measurement.