#define _GNU_SOURCE
#include <sys/time.h>
#include <stdio.h>      /* standard I/O                */
#include <stdlib.h>     /* for exit   - 1 occurrence   */
#include <unistd.h>
#include <pthread.h>
#include <db.h>
#include <string.h>
#include <sys/types.h>
#include <err.h>
#include <db_cxx.h>

#include </usr/include/c++/4.2.3/backward/iostream.h>
//#include <STLdb4/stldb4.hh>

using namespace STLdb4;
using namespace Ferris;
using namespace std;

int main( int, char** )
{
 fh_database db = new Database( DB_BTREE,
                                "/tmp/play.db" );

 string data = "1234567890";
 db[ "fred" ] = data;
 cerr << "Initial value:" << db["fred"] << endl;

 {
   fh_iostream ss = db->getIOStream( "fred" );
   ss << "54321";
 }
 cerr << "Second value:" << db["fred"] << endl;


 {
   fh_iostream ss = db->getIOStream( "fred" );
   ss.seekp( 3 );
   ss << "AAAA";
 }
 cerr << "post seekp value:" << db["fred"] << endl;

 // truncate the iostream and write
 {
  Database::iterator di = db->find( "fred" );
  fh_iostream oss = di.getIOStream(ios::trunc, 0);
  oss << "sm";
 }
 cerr << "Trunc and write:" << db["fred"] << endl;

 // append some more data to end of iostream
 {
  fh_iostream oss = db->find( "fred" )
      .getIOStream( ios::ate, 0 );
  oss << "AndMore";
 }
 cerr << "at end write value:"
      << db["fred"] << endl;

 return 0;
}
