summaryrefslogtreecommitdiff
path: root/ACEXML/common/InputSource.h
blob: ae2b70b130e03d0b3d930921c05c8bc51dc4e9c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// -*- C++ -*-

//=============================================================================
/**
 *  @file    InputSource.h
 *
 *  $Id$
 *
 *  @author Nanbor Wang <nanbor@cs.wustl.edu>
 */
//=============================================================================

#ifndef _ACEXML_INPUTSOURCE_H_
#define _ACEXML_INPUTSOURCE_H_

#include /**/ "ace/pre.h"
#include "ACEXML/common/ACEXML_Export.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
#pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "ACEXML/common/CharStream.h"

/**
 * @class ACEXML_InputSource InputSource.h "ACEXML/common/InputSource.h"
 *
 * @brief ACEXML_InputSource encapsulates the actual input stream with some
 * added information.
 *
 * This class allows a SAX application to encapsulate information
 * about an input source in a single object, which may include a
 * public identifier, a system identifier, a byte stream (possibly
 * with a specified encoding), and/or a character stream.
 *
 * There are two places that the application will deliver this input
 * source to the parser: as the argument to the Parser.parse method,
 * or as the return value of the EntityResolver.resolveEntity method.
 *
 * The SAX parser will use the InputSource object to determine how to
 * read XML input. If there is a character stream available, the
 * parser will read that stream directly; if not, the parser will use
 * a byte stream, if available; if neither a character stream nor a
 * byte stream is available, the parser will attempt to open a URI
 * connection to the resource identified by the system identifier.
 *
 * An InputSource object belongs to the application: the SAX parser
 * shall never modify it in any way (it may modify a copy if
 * necessary).
 *
 * @sa ACEXML_CharStream
 */
class ACEXML_Export ACEXML_InputSource
{
public:
  /**
   * Default constructor.
   */
  ACEXML_InputSource (void);


  /**
   * Create a new input source with a ACEXML_Char stream.
   * Notice that ACEXML_InputSource assumes the ownership
   * of <stream>
   */
  explicit ACEXML_InputSource (ACEXML_CharStream *stream);

  /**
   * Create a new input source with a system identifier.
   */
  ACEXML_InputSource (const ACEXML_Char *systemId);

  /**
   * Default destructor.
   */
  virtual ~ACEXML_InputSource (void);

  /**
   * Get the ACEXML_Char stream for this input source.
   */
  virtual ACEXML_CharStream *getCharStream (void) const;

  /**
   * Get the character encoding for a byte stream or URI.
   */
  virtual const ACEXML_Char *getEncoding (void) const;

  /**
   * Get the public identifier for this input source.
   */
  virtual const ACEXML_Char *getPublicId (void) const;

  /**
   * Get the system identifier for this input source.
   */
  virtual const ACEXML_Char *getSystemId (void) const;

  /**
   * Set the ACEXML_Char stream for this input source.
   * Notice that ACEXML_InputSource assumes the ownership
   * of <stream>
   */
  virtual void setCharStream (ACEXML_CharStream *charStream);

  /**
   * Set the character encoding, if known.
   */
  virtual void setEncoding (const ACEXML_Char *encoding);

  /**
   * Set the public identifier for this input source.
   */
  virtual void setPublicId (const ACEXML_Char *publicId);

  /**
   * Set the public identifier for this input source.
   */
  virtual void setSystemId (const ACEXML_Char *systemId);

private:
  ACEXML_CharStream *charStream_;
  ACEXML_Char *encoding_;
  ACEXML_Char *publicId_;
  ACEXML_Char *systemId_;
};


#include /**/ "ace/post.h"

#endif /* _ACEXML_INPUTSOURCE_H_ */