Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals  

dt_stream_util.c

Go to the documentation of this file.
00001 #include "dt_stream_util.h"
00002 
00003 #include "dt_stream_text.h"
00004 #include "dt_stream_tree.h"
00005 #include "dt_stream_validator.h"
00006 #include "dt_node.h"
00007 
00008 #include <stdio.h>
00009 
00010 
00018 dt_bool dt_stream_transfer( dt_reader* src, dt_writer* dst )
00019 {
00020    dt_stream_step step;
00021    while(  dt_read ( src, &step )  &&  dt_write( dst, &step )  )
00022       if( step.kind == dt_end )
00023          return 1;
00024    return 0;
00025 }
00026 
00027 
00040 dt_bool dt_stream_validated_transfer( dt_reader* src, dt_writer* dst )
00041 {
00042    dt_writer* validator = dt_create_validator_writer( dst );
00043    dt_bool ans =     dt_stream_transfer( src, validator )
00044                   && dt_validator_writer_completed(validator);
00045    dt_free_writer( validator );
00046    return ans;
00047 }
00048 
00049 
00053 dt_node* dt_read_tree_from_file( const char* srcPath )
00054 {
00055    dt_node* ans = 00;
00056    FILE* srcF = fopen(srcPath,"rb");
00057    if( srcF )
00058    {
00059       dt_reader* src = dt_create_text_reader( srcF, 0 );
00060       if( src )
00061       {
00062          dt_writer* treeMaker = dt_create_tree_writer( & ans );
00063          if( treeMaker )
00064          {
00065             if( ! dt_stream_validated_transfer( src, treeMaker ) )
00066             {
00067                dt_node_release( ans );
00068                ans = 0;
00069             }
00070             dt_free_writer(treeMaker);
00071          }
00072          dt_free_reader(src);
00073       }
00074       fclose(srcF);
00075    }
00076    return ans;
00077 }
00078 
00079 
00083 dt_bool dt_write_tree_to_file( dt_node const* root, const char* dstPath )
00084 {
00085 #ifdef _WIN32
00086    enum { defaultFormat = dt_text_crlf };
00087 #else
00088    enum { defaultFormat = 0 };
00089 #endif
00090    dt_bool ans = 0;
00091    FILE* dstF = fopen(dstPath,"wb");
00092    if( dstF )
00093    {
00094       dt_writer* dst = dt_create_text_writer( dstF, defaultFormat );
00095       if( dst )
00096       {
00097          ans = dt_stream_tree( root, dst );
00098          dt_free_writer(dst);
00099       }
00100       ans = ( 0==fclose(dstF) )  &&  ans;
00101    }
00102    return ans;
00103 }
00104 
00105 
00106 
00107 
00108 
00109 

Generated on Sun Jun 1 16:35:38 2003 for datatree by doxygen 1.3.1