libiqxmlrpc  0.12.4
 All Classes Namespaces Files Functions Typedefs Enumerations
value_type_visitor.h
1 // Libiqxmlrpc - an object-oriented XML-RPC solution.
2 // Copyright (C) 2011 Anton Dedov
3 
4 #ifndef _iqxmlrpc_value_type_visitor_base_
5 #define _iqxmlrpc_value_type_visitor_base_
6 
7 #include "value_type.h"
8 
9 #include <iosfwd>
10 
11 namespace iqxmlrpc {
12 
14 
17 class LIBIQXMLRPC_API Value_type_visitor {
18 public:
19  virtual ~Value_type_visitor() {}
20 
21  void visit_value(const Value_type& v)
22  {
23  do_visit_value(v);
24  }
25 
26  void visit_nil()
27  {
28  do_visit_nil();
29  }
30 
31  void visit_int(int i)
32  {
33  do_visit_int(i);
34  }
35 
36  void visit_double(double d)
37  {
38  do_visit_double(d);
39  }
40 
41  void visit_bool(bool b)
42  {
43  do_visit_bool(b);
44  }
45 
46  void visit_string(const std::string& s)
47  {
48  do_visit_string(s);
49  }
50 
51  void visit_struct(const Struct& s)
52  {
53  do_visit_struct(s);
54  }
55 
56  void visit_array(const Array& a)
57  {
58  do_visit_array(a);
59  }
60 
61  void visit_base64(const Binary_data& b)
62  {
63  do_visit_base64(b);
64  }
65 
66  void visit_datetime(const Date_time& d)
67  {
68  do_visit_datetime(d);
69  }
70 
71 private:
72  virtual void do_visit_value(const Value_type&) = 0;
73 
74  virtual void do_visit_nil() = 0;
75  virtual void do_visit_int(int) = 0;
76  virtual void do_visit_double(double) = 0;
77  virtual void do_visit_bool(bool) = 0;
78  virtual void do_visit_string(const std::string&) = 0;
79 
80  virtual void do_visit_struct(const Struct&) = 0;
81  virtual void do_visit_array(const Array&) = 0;
82  virtual void do_visit_base64(const Binary_data&) = 0;
83  virtual void do_visit_datetime(const Date_time&) = 0;
84 };
85 
87 class LIBIQXMLRPC_API Print_value_visitor: public Value_type_visitor {
88 public:
89  Print_value_visitor(std::ostream&);
90 
91 private:
92  virtual void do_visit_value(const Value_type&);
93  virtual void do_visit_nil();
94  virtual void do_visit_int(int);
95  virtual void do_visit_double(double);
96  virtual void do_visit_bool(bool);
97  virtual void do_visit_string(const std::string&);
98  virtual void do_visit_struct(const Struct&);
99  virtual void do_visit_array(const Array&);
100  virtual void do_visit_base64(const Binary_data&);
101  virtual void do_visit_datetime(const Date_time&);
102 
103  std::ostream& out_;
104 };
105 
106 } // namespace iqxmlrpc
107 
108 #endif