/*
    This file is part of BOP.
    Copyright (C) 2004  Patrick Davalan

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

    The GNU General Public License text is also available at
    http://www.gnu.org/
    or on the Copyright holder web site :
    http://patrick.davalan.free.fr/gnu-gpl.html
*/

// change the include to #include <bop.2/bop.h>
#include "bop.h"

#define DEBUG 0

int 
main( )
{
    BopcHandle * container ;
    BopcHandle * newCont ;
    BoplHandle * lHandle ;
    BophHandle * hash ;
    BopsHandle * stack ;
    BoplEntry * list ;

    bopmTrace( ) ;
    
    container = bopcNew( NULL, "higher" ) ;

    // create some  objects
    lHandle = boplNew( container, "list-object 1" ) ;
    hash = bophNew( container, "hash 1", 0 , NULL, NULL ) ;
    hash = bophNew( container, "hash 2", 900 , NULL, NULL ) ;
    stack = bopsNew( container, "stack 1", 0, 0 ) ;
    bopsXSet( stack ) ;
    list = boplNewList( lHandle ) ;
    list = boplNewList( lHandle ) ;
    list = boplNewList( lHandle ) ;
    hash = bophNew( container, "hash 3", 900 , NULL, NULL ) ;
    lHandle = boplNew( container, "list-object 2" ) ;
    hash = bophNew( container, " hash 4", 1000 , NULL, NULL ) ;
    
    // a new container in container with some objects
    newCont = bopcNew( container, "cont 1" ) ;
    stack = bopsNew( newCont, "stack 1.1", 2048, 1024 ) ;
    lHandle = boplNew( newCont, "list-object 1.1" ) ;
    stack = bopsNew( newCont, "stack 1.2", 0, 0 ) ;
    lHandle = boplNew( newCont, "list-object 1.2" ) ;
    list = boplNewList( lHandle ) ;
    list = boplNewList( lHandle ) ;
    
    // some other objects in top level container
    lHandle = boplNew( container, "list-object 3" ) ;
    stack = bopsNew( container, "stack 2", 666, 666 ) ;
    bopsXSet( stack ) ;
    list = boplNewList( lHandle ) ;
    list = boplNewList( lHandle ) ;
    hash = bophNew( container, "hash 5", 0 , NULL, NULL ) ;

    // list all this
    bopcList( stderr, container ) ;

    // close trace file before freeing memory,
    // the only way to have bop memory leaks
    bopmUntrace( ) ;

    // free the container, whatever is in !
    bopcDelete( NULL, container ) ;
    
    bopmMem( ) ;

    exit( EXIT_SUCCESS ) ;
}