12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
- <section id="str" xmlns:xi="http://www.w3.org/2001/XInclude">
- <sectioninfo>
- <revhistory>
- <revision>
- <revnumber>$Revision$</revnumber>
- <date>$Date$</date>
- </revision>
- </revhistory>
- </sectioninfo>
-
- <title>Type <type>str</type></title>
- <para>
- One of our main goals was to make <acronym>SER</acronym> really
- fast. There are many functions across the server that need to work with
- strings. Usually these functions need to know string length. We wanted
- to avoid using of <function>strlen</function> because the function is
- relatively slow. It must scan the whole string and find the first
- occurrence of zero character. To avoid this, we created
- <type>str</type> type. The type has 2 fields, field
- <structfield>s</structfield> is pointer to the beginning of the string
- and field <structfield>len</structfield> is length of the string. We
- then calculate length of the string only once and later reuse saved
- value.
- </para>
- <important>
- <para>
- <type>str</type> structure is quite important because it is widely
- used in <acronym>SER</acronym> (most functions accept
- <type>str</type> instead of <type>char*</type>).
- </para>
- </important>
-
- <para><emphasis><type>str</type> Type Declaration</emphasis></para>
- <programlisting>
- struct _str{
- char* s;
- int len;
- };
- typedef struct _str str;
- </programlisting>
-
- <para>
- The declaration can be found in header file <filename>str.h</filename>.
- </para>
-
- <warning>
- <para>
- Because we store string lengths, there is no need to zero terminate
- them. Some strings in the server are still zero terminated, some
- are not. Be careful when using functions like
- <function>snprintf</function> that rely on the ending zero. You can
- print variable of type <type>str</type> this way:
- <programlisting>
- printf("%.*s", mystring->len, mystring->s);
- </programlisting>
- That ensures that the string will be printed correctly even if
- there is no zero character at the end.
- </para>
- </warning>
- </section>
|