You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kamailio/lib/cds/doc/sstream_t.xml

119 lines
2.9 KiB

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<refentry id="sstream_t">
<refmeta><refentrytitle>sstream_t</refentrytitle>
<manvolnum>3</manvolnum></refmeta>
<refnamediv><refname>sstream_t</refname>
<refpurpose>input/output serialization stream</refpurpose>
</refnamediv>
<refsynopsisdiv><synopsis>
#include &lt;cds/serialize.h&gt;
typedef struct {
dstring_t out;
str_t in;
int in_pos;
enum { sstream_in, sstream_out } type;
} sstream_t;
</synopsis></refsynopsisdiv>
<refsect1><title>Description</title>
<para>This structure represents input and output serialization stream.</para>
<refsect2><title>Members</title>
<para><variablelist>
<varlistentry>
<term><varname>out</varname></term>
<listitem><para>Dynamic string holding output data in the case of output
stream.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>in</varname></term>
<listitem><para>String holding input data in the case of input
stream.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>in_pos</varname></term>
<listitem><para>Actual position in input data (points to first unread char)
in the case of input stream.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>type</varname></term>
<listitem><para>Member holding stream type - input or output.</para></listitem>
</varlistentry>
</variablelist></para>
<para>Warning - internals of this data structure may change! Use it only through
manipulation functions.
</para>
</refsect2>
</refsect1>
<refsect1 id="sstream_t.example"><title>Example</title>
<programlisting>
#include &lt;cds/sstr.h&gt;
#include &lt;cds/serialize.h&gt;
typedef struct {
str_t name;
int number;
char c;
} test_t;
int serialize_test_struct(sstream_t *store, test_t *t)
{
if (serialize_str(store, &amp;t->name) != 0) return -1;
if (serialize_int(store, &amp;t->number) != 0) return -1;
if (serialize_char(store, &amp;t->c) != 0) return -1;
return 0;
}
int main(int argc, char **argv)
{
sstream_t store;
str_t data;
test_t a = { name: {"test A", 6}, number: 13, c: 'x' };
test_t b;
str_clear(&amp;data);
/* storing structure to the string */
init_output_sstream(&amp;store, 256);
if (serialize_test_struct(&amp;store, &amp;a) == 0) {
if (get_serialized_sstream(&amp;store, &amp;data) != 0)
printf("can't get data\n");
}
else printf("can't serialize\n");
destroy_sstream(&amp;store);
/* loading structure from the string */
init_input_sstream(&amp;store, data.s, data.len);
if (serialize_test_struct(&amp;store, &amp;b) == 0) {
printf("test_t = { %.*s, %d, %c }\n",
FMT_STR(b.name), b.number, b.c);
/* cleanup */
str_free_content(&amp;b.name);
}
else printf("can't deserialize\n");
destroy_sstream(&amp;store);
/* cleanup */
str_free_content(&amp;data);
return 0;
}
</programlisting>
</refsect1>
</refentry>