Subversion Repositories spk

Rev

Rev 1 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 cycrow 1
/*
2
  this is the main class of the encoder/decoder
3
  it has all the methods you need to load/write/convert the bob/bod data
4
 
5
  I was inspired by document object model (DOM) from W3C - hence the 
6
  bob_dom prefix in most of classes
7
*/
8
 
9
#ifndef BOB_DOM_INCLUDED
10
#define BOB_DOM_INCLUDED
11
 
12
#include "bob_dom_cut.h"
13
#include "bob_dom_bob.h"
14
 
15
#include "settings.h"
16
 
17
#include <stdarg.h>
18
 
19
class bob_dom_document
20
{
21
	public:
22
		enum ErrorCode
23
		{
24
			// BOB converter
25
			E_BadHeader,
26
			E_BadEndHeader,
27
			E_Error,
28
			E_NoError,
29
			E_MoreData,
30
			E_NotEnoughData,
31
			E_NoStatFormat,
32
			E_FormatUserWarning,
114 cycrow 33
			E_UnkPointFlags,
1 cycrow 34
			E_PointNotFound,
35
			E_BadVersion
36
		};
37
 
38
		enum ErrorSeverity
39
		{
114 cycrow 40
			S_OK = 0,
1 cycrow 41
			S_Warning,
42
			S_Error
43
		};
44
 
45
		enum ErrorFacility
46
		{
47
			F_BOBLoader,
48
			F_StatLoader
49
		};
50
 
51
		struct Error
52
		{
53
			int code;
54
			char text[255];
55
 
56
			void makeCode(ErrorFacility f, ErrorSeverity s, ErrorCode e)
57
			{
58
				code=s << 24;
59
				code|=f << 16;
60
				code|=e;
61
			}
62
 
63
			ErrorSeverity severity() const { return (ErrorSeverity)(code >> 24); }
64
			ErrorFacility facility() const { return (ErrorFacility)((code >> 16) & 0xff); }
65
			bool failed() const { return (severity() & S_Error) > 0; }
66
			bool warning() const { return (severity() & S_Warning) > 0; }
114 cycrow 67
			bool succeeded() const { return (severity() & S_OK) == 0; }
1 cycrow 68
 
69
			ErrorCode getCode() const { return (ErrorCode)(code & 0xFFFF); }
70
		};
71
 
72
	private:
73
		typedef ext::list<Error*> ErrorList;
74
 
75
		const Settings *settings;
76
 
77
		void error(ErrorFacility facility, ErrorSeverity severity, ErrorCode code, const char *format, ...);
78
		void verror(ErrorFacility facility, ErrorSeverity severity, ErrorCode code, const char *format, va_list ap);
79
		void vbob_error(bob_error_severity severity, bob_error_codes code, const char *format, va_list ap);
80
		void bob_error(bob_error_severity severity, bob_error_codes code, const char *format, ...);
81
		void ini_error(Settings::ErrorType type, Settings::ErrorCodes code, const char *msg);
82
 
83
	public:
84
		typedef ErrorList::iterator ErrorIterator;
85
 
86
		bob_dom_bob *bob;
87
		bob_dom_cut *cut;
88
		ErrorList errors;
89
 
90
		bob_dom_document(const Settings *settings) { this->settings=settings; bob=0; cut=0; }
91
		~bob_dom_document() { delete bob; delete cut; clearErrors(); }
92
 
93
		void clearErrors() 
94
		{ 
95
			for(ErrorIterator &it=errors.begin(); it!=errors.end(); ++it){
96
				delete *it;
97
			}
98
			errors.clear(); 
99
		}
100
 
114 cycrow 101
		bool fromFile(ibinaryfilestream& is);
1 cycrow 102
 
114 cycrow 103
		bool convert(ibinaryfilestream& is, otextfilestream& os);
1 cycrow 104
 
114 cycrow 105
		bool toFile(obinaryfilestream& os);
106
		bool toFile(otextfilestream& os);
1 cycrow 107
 
108
};
109
 
110
 
111
#endif // !defined(BOB_DOM_INCLUDED)