mirror of
https://github.com/troydhanson/tpl.git
synced 2024-12-27 08:05:39 +08:00
163 lines
4.4 KiB
HTML
163 lines
4.4 KiB
HTML
|
<!DOCTYPE html
|
||
|
PUBLIC "-//W3C//DTD XTHML 1.0 Strict//EN"
|
||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||
|
<head>
|
||
|
<link rel="stylesheet" type="text/css" href="styles.css" />
|
||
|
<title>tpl home page</title>
|
||
|
</head>
|
||
|
<body>
|
||
|
|
||
|
<div id="banner">
|
||
|
<img src="img/banner.png" alt="easy data storage and retrieval in C" />
|
||
|
</div> <!-- banner -->
|
||
|
|
||
|
<div id="topnav">
|
||
|
<a href="http://sourceforge.net/projects/tpl/">sf.net summary page</a> >
|
||
|
tpl home
|
||
|
</div> <!-- topnav -->
|
||
|
|
||
|
<hr />
|
||
|
<div id="mid">
|
||
|
|
||
|
<div id="nav">
|
||
|
|
||
|
|
||
|
<h2>documentation</h2>
|
||
|
<div><a href="userguide.html">user guide</a> (<a href="userguide.html">html</a>, <a href="userguide.pdf">pdf</a>)</div>
|
||
|
|
||
|
<h2>download</h2>
|
||
|
<h3>Linux, Mac OSX, Solaris, BSD</h3>
|
||
|
<div><a href="http://downloads.sourceforge.net/tpl/libtpl-1.5.tar.bz2">libtpl-1.5.tar.bz2</a></div>
|
||
|
<h3>Visual Studio 2008 Solution</h3>
|
||
|
<div><a href="http://downloads.sourceforge.net/tpl/tpl-1.5-vs2008.zip">tpl-1.5-vs2008.zip</a></div>
|
||
|
|
||
|
<h2>last release</h2>
|
||
|
<div>February, 2010</div>
|
||
|
<div><a href="ChangeLog.html">ChangeLog</a></div>
|
||
|
|
||
|
<h2>license</h2>
|
||
|
<div><a href="license.html">BSD revised</a></div>
|
||
|
|
||
|
<h2>news feed</h2>
|
||
|
<div><a href="http://troydhanson.wordpress.com/">updates blog</a> (<a href="http://troydhanson.wordpress.com/feed/">rss</a>)<img alt=" rss" src="img/rss.png"/></div>
|
||
|
|
||
|
<h2>platforms</h2>
|
||
|
<div>linux</div>
|
||
|
<div>os x</div>
|
||
|
<div>windows</div>
|
||
|
<div>solaris</div>
|
||
|
<div>openbsd</div>
|
||
|
|
||
|
<h2>other projects</h2>
|
||
|
<div><a href="http://uthash.sourceforge.net/">uthash</a></div>
|
||
|
<div><a href="http://tkhanson.net/misc/">scripts & snippets</a></div>
|
||
|
|
||
|
<h2>developer</h2>
|
||
|
<div>Troy D. Hanson</div>
|
||
|
<div>tdh at tkhanson.net</div>
|
||
|
|
||
|
</div> <!-- nav -->
|
||
|
|
||
|
<div id="main">
|
||
|
|
||
|
<div>
|
||
|
<div class="lead">Efficient serialization in C</div>
|
||
|
You can use tpl to store and reload your C data quickly and easily.
|
||
|
Tpl works with files, memory buffers and file descriptors so it's
|
||
|
suitable for use as a file format, IPC message format or any scenario
|
||
|
where you need to store and retrieve your data.
|
||
|
</div>
|
||
|
|
||
|
<div>
|
||
|
<div class="lead">Express your data</div>
|
||
|
Just express the type of data you are working with as a tpl format string. For
|
||
|
example, if you have a list of numeric ids and corresponding usernames, your
|
||
|
format string is <em>A(is)</em>. Map your C variables to the format string and
|
||
|
then pack or unpack data. The format string lets you focus on your data,
|
||
|
rather than the storage format.
|
||
|
</div>
|
||
|
|
||
|
<div class="listing">
|
||
|
<table summary="example of storing and reloading an integer array">
|
||
|
<tr>
|
||
|
<th>
|
||
|
Storing ids and usernames
|
||
|
</th>
|
||
|
<th>
|
||
|
Reloading ids and usernames
|
||
|
</th>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td>
|
||
|
<div class="code">
|
||
|
<pre>
|
||
|
#include "tpl.h"
|
||
|
|
||
|
int main(int argc, char *argv[]) {
|
||
|
tpl_node *tn;
|
||
|
int id=0;
|
||
|
char *name, *names[] = { "joe", "bob", "cary" };
|
||
|
|
||
|
tn = tpl_map("A(is)", &id, &name);
|
||
|
|
||
|
for(name=names[0]; id < 3; name=names[++id]) {
|
||
|
tpl_pack(tn,1);
|
||
|
}
|
||
|
|
||
|
tpl_dump(tn, TPL_FILE, "users.tpl");
|
||
|
tpl_free(tn);
|
||
|
}
|
||
|
</pre>
|
||
|
</div> <!-- code -->
|
||
|
</td>
|
||
|
<td>
|
||
|
<div class="code">
|
||
|
<pre>
|
||
|
#include "tpl.h"
|
||
|
|
||
|
int main(int argc, char *argv[]) {
|
||
|
tpl_node *tn;
|
||
|
int id;
|
||
|
char *name;
|
||
|
|
||
|
tn = tpl_map("A(is)", &id, &name);
|
||
|
tpl_load(tn, TPL_FILE, "users.tpl");
|
||
|
|
||
|
while ( tpl_unpack(tn,1) > 0 ) {
|
||
|
printf("id %d, user %s\n", id, name);
|
||
|
free(name);
|
||
|
}
|
||
|
tpl_free(tn);
|
||
|
}
|
||
|
</pre>
|
||
|
</div> <!-- code -->
|
||
|
</td>
|
||
|
</tr>
|
||
|
</table>
|
||
|
</div> <!-- listing -->
|
||
|
|
||
|
<div>
|
||
|
<div class="lead">No library dependencies</div>
|
||
|
Tpl does not make your software dependent on any libraries. You can compile its
|
||
|
source code (one file) right into your program.
|
||
|
</div>
|
||
|
|
||
|
<div class="lead">For more information</div>
|
||
|
For a more thorough explanation and more examples, please read the
|
||
|
<a href="userguide.html">User Guide.</a>
|
||
|
|
||
|
</div> <!-- main -->
|
||
|
</div> <!-- mid -->
|
||
|
|
||
|
<hr />
|
||
|
<div id="footer">
|
||
|
<a href="http://sourceforge.net/projects/tpl"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=157637&type=13" width="120" height="30" alt="SourceForge.net." /></a>
|
||
|
<p>This project is hosted on SourceForge.net</p>
|
||
|
<p>$Id: index.html 192 2009-04-24 10:35:30Z thanson $</p>
|
||
|
</div> <!-- footer -->
|
||
|
|
||
|
</body>
|
||
|
|
||
|
</html>
|