blob: 4d84e33b9f22d122901c86720e87869eeab96b37 (
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
|
#!/usr/bin/env ruby
# Usage: output_directory xml_spec_file [xml_spec_file...]
#
$: << '..'
require 'cppgen'
class OperationsGen < CppGen
def initialize(chassis, outdir, amqp)
super(outdir, amqp)
@chassis=chassis
@classname="AMQP_#{@chassis.caps}Operations"
end
def handler_method (m)
gen "\nvirtual void #{m.cppname}("
gen m.signature.join(",\n")
gen ") = 0;\n"
end
def handler_classname(c) c.name.caps+"Handler"; end
def handler_class(c)
handlerclass=handler_classname c
gen <<EOS
// ==================== class #{handlerclass} ====================
class #{handlerclass} : Invocable {
// Constructors and destructors
public:
#{handlerclass}(){};
virtual ~#{handlerclass}() {}
// Protocol methods
EOS
c.methods_on(@chassis).each { |m| handler_method(m) }
gen <<EOS
}; // class #{handlerclass}
EOS
end
def handler_get(c)
handlerclass=handler_classname c
gen "virtual #{handlerclass}* get#{handlerclass}() = 0;\n"
end
def generate()
h_file("#{@classname}.h") {
gen <<EOS
#include <sstream>
#include "qpid/framing/ProtocolVersion.h"
namespace qpid {
namespace framing {
class #{@classname} {
public:
virtual ~#{@classname}() {}
virtual ProtocolVersion getVersion() const = 0;
// Include framing constant declarations
#include "AMQP_Constants.h"
// Inner classes
EOS
indent { @amqp.classes.each { |c| handler_class(c) } }
gen <<EOS
// Method handler get methods
EOS
indent { @amqp.classes.each { |c| handler_get(c) } }
gen <<EOS
}; /* class #{@classname} */
}
EOS
}
end
end
OperationsGen.new("client",ARGV[0], amqp).generate()
OperationsGen.new("server",ARGV[0], amqp).generate()
|