summaryrefslogtreecommitdiff
path: root/cpp/rubygen
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2008-09-09 14:06:07 +0000
committerAlan Conway <aconway@apache.org>2008-09-09 14:06:07 +0000
commit833cf68a5bf58e882f377d144768ceb546e5e036 (patch)
tree8b2ca57e790956a38c33583970a5c4198b407073 /cpp/rubygen
parent7feb5546e82e0d003f26027524ceb07e9b9b0452 (diff)
downloadqpid-python-833cf68a5bf58e882f377d144768ceb546e5e036.tar.gz
Generate c++ enum types for AMQP enums in framing/enum.h.
Modified enum scheme to avoid name clashes: namespace amqp_class { EnumName { ENUM_NAME_X=1, ENUM_NAME_X=2 ...}}; git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@693465 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/rubygen')
-rwxr-xr-xcpp/rubygen/framing.0-10/constants.rb47
1 files changed, 28 insertions, 19 deletions
diff --git a/cpp/rubygen/framing.0-10/constants.rb b/cpp/rubygen/framing.0-10/constants.rb
index e1c255cb73..179e5f9f93 100755
--- a/cpp/rubygen/framing.0-10/constants.rb
+++ b/cpp/rubygen/framing.0-10/constants.rb
@@ -30,7 +30,8 @@ class ConstantsGen < CppGen
def constants_h()
h_file("#{@dir}/constants") {
- namespace(@namespace) {
+ namespace(@namespace) {
+ # Constants for class/method names.
scope("enum AmqpConstant {","};") {
l=[]
l.concat @amqp.constants.map { |c| "#{c.name.shout}=#{c.value}" }
@@ -41,35 +42,42 @@ class ConstantsGen < CppGen
}
genl l.join(",\n")
}
- define_constants_for(@amqp.domain("segment-type").enum)
- namespace("execution") {
- define_constants_for(@amqp.class_("execution").domain("error-code").enum)
- }
- namespace("connection") {
- define_constants_for(@amqp.class_("connection").domain("close-code").enum)
- }
- namespace("session") {
- define_constants_for(@amqp.class_("session").domain("detach-code").enum)
+ }
+ }
+ end
+
+ def enum_h()
+ h_file("#{@dir}/enum") {
+ # Constants for enum domains.
+ namespace(@namespace) {
+ @amqp.domains.each { |d| define_enum(d.enum) if d.enum }
+ @amqp.classes.each { |c|
+ enums=c.collect_all(AmqpEnum)
+ if !enums.empty? then
+ namespace(c.nsname) { enums.each { |e| define_enum(e) } }
+ end
}
- define_constants_for(@amqp.class_("dtx").domain("xa-status").enum)
}
}
end
- def define_constants_for(enum)
- scope("enum #{enum.parent.name.caps} {","};") {
- genl enum.choices.collect { |c| "#{c.name.shout}=#{c.value}" }.join(",\n")
+ def define_enum(enum)
+ # Generated like this: enum containing_class::Foo { FOO_X, FOO_Y; }
+ name="#{enum.parent.name.caps}"
+ prefix=enum.parent.name.shout+"_"
+ scope("enum #{name} {","};") {
+ genl enum.choices.collect { |c| "#{prefix}#{c.name.shout}=#{c.value}" }.join(",\n")
}
end
def define_exception(c, base, package)
- name=c.name.caps+"Exception"
- genl
- doxygen_comment { genl c.doc }
- struct(c.name.caps+"Exception", base) {
+ name=c.name.caps+"Exception"
+ genl
+ doxygen_comment { genl c.doc }
+ struct(c.name.caps+"Exception", base) {
genl "std::string getPrefix() const { return \"#{c.name}\"; }"
genl "#{c.name.caps}Exception(const std::string& msg=std::string()) : #{base}(#{c.value}, \"\"+msg) {}"
- }
+ }
end
def define_exceptions_for(class_name, domain_name, base)
@@ -119,6 +127,7 @@ class ConstantsGen < CppGen
def generate()
constants_h
+ enum_h
reply_exceptions_h
reply_exceptions_cpp
end