1/*
2 * Copyright (c) 1999-2000, Eric Moon.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions, and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions, and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 *
16 * 3. The name of the author may not be used to endorse or promote products
17 *    derived from this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 * OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
27 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31
32// ImportContext.h
33// * PURPOSE
34//   Describe the state of a deserialization ('load') operation.
35//   The 'save' equivalent is ExportContext.
36//
37// * HISTORY
38//   e.moon		29jun99		Begun
39
40#ifndef __ImportContext_H__
41#define __ImportContext_H__
42
43#include <list>
44#include <utility>
45#include <String.h>
46
47#include "cortex_defs.h"
48__BEGIN_CORTEX_NAMESPACE
49
50class IPersistent;
51
52class ImportContext {
53	friend class Importer;
54
55public:													// *** types
56	enum state_t {
57		PARSING,
58		COMPLETE,
59		ABORT
60	};
61
62public:													// *** ctor/dtor
63	virtual ~ImportContext();
64	ImportContext(
65		std::list<BString>&						errors);
66
67public:													// *** accessors
68
69	// fetch the current element (tag)
70	// (returns 0 if the stack is empty)
71	const char* element() const;
72
73	// fetch the current element's parent
74	// (returns 0 if the stack is empty or the current element is top-level)
75	const char* parentElement() const;
76
77	std::list<BString>& errors() const;
78	const state_t state() const;
79
80public:													// *** error-reporting operations
81
82	// register a warning to be returned once the deserialization
83	// process is complete.
84	void reportWarning(
85		const char*									text);
86
87	// register a fatal error; halts the deserialization process
88	// as soon as possible.
89	void reportError(
90		const char*									text);
91
92protected:											// *** internal operations
93
94	void reset();
95
96private:												// *** members
97	state_t												m_state;
98	std::list<BString>&							m_errors;
99
100	std::list<BString>								m_elementStack;
101	typedef std::pair<const char*, IPersistent*> object_entry;
102	std::list<object_entry>						m_objectStack;
103
104	void*													m_pParser;
105};
106__END_CORTEX_NAMESPACE
107#endif /*__ImportContext_H__*/
108