def generate(self): self.decl_includes = [ "modules/protobuf/src/protobuf_utils.h", "modules/protobuf/src/protobuf_message.h", ] self.decl_forward_decls = [ "OpScopeTPMessage", "OpProtobufField", "OpProtobufMessage", ] self.impl_includes = [ "modules/protobuf/src/protobuf_utils.h", "modules/scope/src/scope_tp_message.h", "modules/scope/src/scope_default_message.h", "modules/scope/src/scope_manager.h", "modules/scope/src/generated/g_scope_manager.h", ] if "cpp_file" in self.service.options: cpp_file = self.service.options["cpp_file"].value else: cpp_file = utils.join_underscore( utils.split_camelcase(self.service.name)) files = self.service.cpp.files() self.impl_includes.append(files["generatedServiceDeclaration"]) self.impl_includes.append(files["serviceDeclaration"]) commands = copy(self.sortedCommands()) for command in commands: command.options["cpp_enum_name"] = commandEnumName(command.name) requests = [ command for command in commands if issubclass(type(command), Request) and not is_deferred(command) ] events = [ command for command in commands if issubclass(type(command), Event) ] async = [(command.toRequest(), command.toEvent()) for command in commands if issubclass(type(command), Request) and is_deferred(command) ] requests += [req[0] for req in async] events += [req[1] for req in async] self.service.version = self.getVersion() import hob.proto self.commands = commands self.requests = requests self.events = events
def generate(self): self.decl_includes = ["modules/protobuf/src/protobuf_utils.h", "modules/protobuf/src/protobuf_message.h"] self.decl_forward_decls = ["OpScopeTPMessage", "OpProtobufField", "OpProtobufMessage"] self.impl_includes = [ "modules/protobuf/src/protobuf_utils.h", "modules/scope/src/scope_tp_message.h", "modules/scope/src/scope_default_message.h", "modules/scope/src/scope_manager.h", "modules/scope/src/generated/g_scope_manager.h", ] if "cpp_file" in self.service.options: cpp_file = self.service.options["cpp_file"].value else: cpp_file = utils.join_underscore(utils.split_camelcase(self.service.name)) files = self.service.cpp.files() self.impl_includes.append(files["generatedServiceDeclaration"]) self.impl_includes.append(files["serviceDeclaration"]) commands = copy(self.sortedCommands()) for command in commands: command.options["cpp_enum_name"] = commandEnumName(command.name) requests = [command for command in commands if issubclass(type(command), Request) and not is_deferred(command)] events = [command for command in commands if issubclass(type(command), Event)] async = [ (command.toRequest(), command.toEvent()) for command in commands if issubclass(type(command), Request) and is_deferred(command) ] requests += [req[0] for req in async] events += [req[1] for req in async] self.service.version = self.getVersion() import hob.proto self.commands = commands self.requests = requests self.events = events
def renderDeclaration(self, services): text = "" text += "\n" + render(""" // Includes #include "modules/scope/src/scope_service.h" // Includes for shared variables """) + "\n\n" for include in self.manager_options.includes: text += """#include "%s"\n""" % include text += "\n" + render(""" // Forward declarations """) + "\n\n" for service in services: if "cpp_instance" not in service.options or service.options["cpp_instance"].value == "true": if "cpp_feature" in service.options: text += "#ifdef %(feature)s\n" % {"feature": service.options["cpp_feature"].value} text += "class %(class)s;\n" % {"class": service.options["cpp_class"].value} if "cpp_feature" in service.options: text += "#endif // %(feature)s\n" % {"feature": service.options["cpp_feature"].value} text += "\n" + render(""" // Interface definitions """) + "\n\n" for service in services: if "cpp_feature" in service.options: text += "#ifdef %(feature)s\n" % {"feature": service.options["cpp_feature"].value} prefix = "g_scope_" basename = utils.join_underscore(utils.split_camelcase(service.name)) if "cpp_file" in service.options: basename = service.options["cpp_file"].value prefix = "g_" text += """# include "%(cpp_gen_base)s/%(file)s_interface.h"\n""" % { "file": prefix + basename, "cpp_gen_base": service.options["cpp_gen_base"].value, } if "cpp_feature" in service.options: text += "#endif // %(feature)s\n" % {"feature": service.options["cpp_feature"].value} text += "\n" + render(""" class OpScopeDescriptorSet; class OpScopeManager; class OpScopeServiceManager; /** * This is a generated class which defines all services which are use in scope. * It provides methods for registering meta-services as well as creating all * service objects. * In addition it keeps an instance of the OpScopeDescriptorSet class, this is * used to provide descriptor objects for messages in each service. * * This class is meant to be sub-classed into a real scope manager. The sub-class * must call RegisterMetaService() to register meta-services, and then call * CreateServices() and CreateServiceDescriptors() at a convenient time to * initialize the class properly. * * @note This class is generated. */ class OpScopeServiceFactory { public: /** * Initializes the generated manager with all service pointers set to NULL. */ OpScopeServiceFactory(); /** * Deletes all active services and the descriptor set. */ virtual ~OpScopeServiceFactory(); /** * Get a reference to the descriptor set. Can only be used * after a successful call to CreateServiceDescriptors. */ OpScopeDescriptorSet &GetDescriptorSet(); /** * Add a new meta-service named @a name. Meta-services are services * which have no functionality, no version and cannot be introspected. * * The actual service will be created when CreateServices() is called * by a sub-class. Adding a meta-service after that point will have no * effect. * * If the meta-service has already been registered it will return OpStatus::ERR. * * @param name The name of the meta-service. * @return OpStatus::OK, OpStatus::ERR or OpStatus::ERR_NO_MEMORY * */ OP_STATUS RegisterMetaService(const uni_char *name); /** * @see RegisterMetaService(const uni_char *name); */ OP_STATUS RegisterMetaService(const OpString &name) { return RegisterMetaService(name.CStr()); } protected: /** * Creates all services. * * @param manager The manager that owns the services. * @return OpStatus::OK on success, OpStatus::ERR_NO_MEMORY otherwise. */ OP_STATUS CreateServices(OpScopeServiceManager *manager); /** * Deletes all services. No more events will be accepted from Core * after this method is called, even events triggered by service * destruction. */ void DeleteServices(); /** * Create service descriptions. * * @return OpStatus::OK on success, OpStatus::ERR_NO_MEMORY otherwise. */ OP_STATUS CreateServiceDescriptors(); public: OpScopeDescriptorSet *descriptors; // Services: """) + "\n\n" for service in services: if "cpp_instance" not in service.options or service.options["cpp_instance"].value == "true": if "cpp_feature" in service.options: text += "#ifdef %(feature)s\n" % {"feature": service.options["cpp_feature"].value} text += " %(class)s *%(name)s;\n" % { "class": service.options["cpp_class"].value, "name": self.memberName(service.name), } if "cpp_feature" in service.options: text += "#endif // %(feature)s\n" % {"feature": service.options["cpp_feature"].value} text += "\n" + render(""" private: /** * Defines the name of a meta-service and manages the service object. * The meta-service is first initailized with a name and later on in the * CreateServices() a service object is created and placed in service. * When the MetaService is destructed it will delete the service object. */ struct MetaService : public ListElement<MetaService> { MetaService() : service(NULL) {} ~MetaService() { OP_DELETE(service); } OpString name; OpScopeService *service; }; /** * List of meta-services currently registered. */ List<MetaService> meta_services; // NOTE: These two methods are meant to be manually created outside of these classes // See modules/scope/src/scope_manager.cpp for the implementation /** * Initializes any shared member variables, called before the services are created. */ OP_STATUS InitializeShared(); /** * Cleans up the shared member variables, called after the services has been deleted. */ void CleanupShared(); // Shared member variables. See cpp.conf for more information. """) + "\n" for field in self.manager_options.shared_fields: text += " %s;\n" % field text += render(""" }; // OpScopeServiceFactory /** * Contains the descriptors of all services in use by scope. * * @note This class is generated. */ class OpScopeDescriptorSet { public: OpScopeDescriptorSet(); ~OpScopeDescriptorSet(); OP_STATUS Construct(); private: // Not really used for anything, except to prevent errors on certain // compile configurations. int dummy; public: """) + "\n" for service in services: if "cpp_feature" in service.options: text += "#ifdef %(feature)s\n" % {"feature": service.options["cpp_feature"].value} text += " %(class)s_SI::Descriptors *%(name)s;\n" % { "class": service.options["cpp_class"].value, "name": self.varName(service.name), } if "cpp_feature" in service.options: text += "#endif // %(feature)s\n" % {"feature": service.options["cpp_feature"].value} text += "\n" + render(""" }; // OpScopeDescriptorSet """) + "\n" return text
def renderDeclaration(self, services): text = "" text += "\n" + render(""" // Includes #include "modules/scope/src/scope_service.h" // Includes for shared variables """) + "\n\n" for include in self.manager_options.includes: text += """#include "%s"\n""" % include text += "\n" + render(""" // Forward declarations """) + "\n\n" for service in services: if "cpp_instance" not in service.options or service.options[ "cpp_instance"].value == "true": if "cpp_feature" in service.options: text += "#ifdef %(feature)s\n" % { "feature": service.options["cpp_feature"].value } text += "class %(class)s;\n" % { "class": service.options["cpp_class"].value } if "cpp_feature" in service.options: text += "#endif // %(feature)s\n" % { "feature": service.options["cpp_feature"].value } text += "\n" + render(""" // Interface definitions """) + "\n\n" for service in services: if "cpp_feature" in service.options: text += "#ifdef %(feature)s\n" % { "feature": service.options["cpp_feature"].value } prefix = "g_scope_" basename = utils.join_underscore( utils.split_camelcase(service.name)) if "cpp_file" in service.options: basename = service.options["cpp_file"].value prefix = "g_" text += """# include "%(cpp_gen_base)s/%(file)s_interface.h"\n""" % { "file": prefix + basename, "cpp_gen_base": service.options["cpp_gen_base"].value, } if "cpp_feature" in service.options: text += "#endif // %(feature)s\n" % { "feature": service.options["cpp_feature"].value } text += "\n" + render(""" class OpScopeDescriptorSet; class OpScopeManager; class OpScopeServiceManager; /** * This is a generated class which defines all services which are use in scope. * It provides methods for registering meta-services as well as creating all * service objects. * In addition it keeps an instance of the OpScopeDescriptorSet class, this is * used to provide descriptor objects for messages in each service. * * This class is meant to be sub-classed into a real scope manager. The sub-class * must call RegisterMetaService() to register meta-services, and then call * CreateServices() and CreateServiceDescriptors() at a convenient time to * initialize the class properly. * * @note This class is generated. */ class OpScopeServiceFactory { public: /** * Initializes the generated manager with all service pointers set to NULL. */ OpScopeServiceFactory(); /** * Deletes all active services and the descriptor set. */ virtual ~OpScopeServiceFactory(); /** * Get a reference to the descriptor set. Can only be used * after a successful call to CreateServiceDescriptors. */ OpScopeDescriptorSet &GetDescriptorSet(); /** * Add a new meta-service named @a name. Meta-services are services * which have no functionality, no version and cannot be introspected. * * The actual service will be created when CreateServices() is called * by a sub-class. Adding a meta-service after that point will have no * effect. * * If the meta-service has already been registered it will return OpStatus::ERR. * * @param name The name of the meta-service. * @return OpStatus::OK, OpStatus::ERR or OpStatus::ERR_NO_MEMORY * */ OP_STATUS RegisterMetaService(const uni_char *name); /** * @see RegisterMetaService(const uni_char *name); */ OP_STATUS RegisterMetaService(const OpString &name) { return RegisterMetaService(name.CStr()); } protected: /** * Creates all services. * * @param manager The manager that owns the services. * @return OpStatus::OK on success, OpStatus::ERR_NO_MEMORY otherwise. */ OP_STATUS CreateServices(OpScopeServiceManager *manager); /** * Deletes all services. No more events will be accepted from Core * after this method is called, even events triggered by service * destruction. */ void DeleteServices(); /** * Create service descriptions. * * @return OpStatus::OK on success, OpStatus::ERR_NO_MEMORY otherwise. */ OP_STATUS CreateServiceDescriptors(); public: OpScopeDescriptorSet *descriptors; // Services: """) + "\n\n" for service in services: if "cpp_instance" not in service.options or service.options[ "cpp_instance"].value == "true": if "cpp_feature" in service.options: text += "#ifdef %(feature)s\n" % { "feature": service.options["cpp_feature"].value } text += " %(class)s *%(name)s;\n" % { "class": service.options["cpp_class"].value, "name": self.memberName(service.name), } if "cpp_feature" in service.options: text += "#endif // %(feature)s\n" % { "feature": service.options["cpp_feature"].value } text += "\n" + render(""" private: /** * Defines the name of a meta-service and manages the service object. * The meta-service is first initailized with a name and later on in the * CreateServices() a service object is created and placed in service. * When the MetaService is destructed it will delete the service object. */ struct MetaService : public ListElement<MetaService> { MetaService() : service(NULL) {} ~MetaService() { OP_DELETE(service); } OpString name; OpScopeService *service; }; /** * List of meta-services currently registered. */ List<MetaService> meta_services; // NOTE: These two methods are meant to be manually created outside of these classes // See modules/scope/src/scope_manager.cpp for the implementation /** * Initializes any shared member variables, called before the services are created. */ OP_STATUS InitializeShared(); /** * Cleans up the shared member variables, called after the services has been deleted. */ void CleanupShared(); // Shared member variables. See cpp.conf for more information. """) + "\n" for field in self.manager_options.shared_fields: text += " %s;\n" % field text += render(""" }; // OpScopeServiceFactory /** * Contains the descriptors of all services in use by scope. * * @note This class is generated. */ class OpScopeDescriptorSet { public: OpScopeDescriptorSet(); ~OpScopeDescriptorSet(); OP_STATUS Construct(); private: // Not really used for anything, except to prevent errors on certain // compile configurations. int dummy; public: """) + "\n" for service in services: if "cpp_feature" in service.options: text += "#ifdef %(feature)s\n" % { "feature": service.options["cpp_feature"].value } text += " %(class)s_SI::Descriptors *%(name)s;\n" % { "class": service.options["cpp_class"].value, "name": self.varName(service.name), } if "cpp_feature" in service.options: text += "#endif // %(feature)s\n" % { "feature": service.options["cpp_feature"].value } text += "\n" + render(""" }; // OpScopeDescriptorSet """) + "\n" return text