/** * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import org.apache.activemq.openwire.tool.OpenWireCppMarshallingClassesScript /** * Generates the C++ marshalling classes for the Open Wire Format * * @version $Revision$ */ class GenerateCppMarshallingClasses extends OpenWireCppMarshallingClassesScript { void generateFile(PrintWriter out) { out << """/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "marshal/${className}.hpp" using namespace apache::activemq::client::marshal; /* * Marshalling code for Open Wire Format for ${jclass.simpleName} * * NOTE!: This file is autogenerated - do not modify! * if you need to make a change, please see the Groovy scripts in the * activemq-core module */ ${className}::${className}() { // no-op } ${className}::~${className}() { // no-op } """ if( !abstractClass ) out << """ IDataStructure* ${className}::createObject() { return new ${jclass.simpleName}(); } char ${className}::getDataStructureType() { return ${jclass.simpleName}.ID_${jclass.simpleName}; } """ out << """ /* * Un-marshal an object instance from the data input stream */ void ${className}::unmarshal(ProtocolFormat& wireFormat, Object o, BinaryReader& dataIn, BooleanStream& bs) { base.unmarshal(wireFormat, o, dataIn, bs); """ if( !properties.isEmpty() || marshallerAware ) out << """ ${jclass.simpleName}& info = (${jclass.simpleName}&) o; """ if( marshallerAware ) out << """ info.beforeUnmarshall(wireFormat); """ generateTightUnmarshalBody(out) if( marshallerAware ) out << """ info.afterUnmarshall(wireFormat); """ out << """ } /* * Write the booleans that this object uses to a BooleanStream */ int ${className}::marshal1(ProtocolFormat& wireFormat, Object& o, BooleanStream& bs) { ${jclass.simpleName}& info = (${jclass.simpleName}&) o; """ if( marshallerAware ) out << """ info.beforeMarshall(wireFormat); """ out << """ int rc = base.marshal1(wireFormat, info, bs); """ def baseSize = generateMarshal1Body(out) out << """ return rc + ${baseSize}; } /* * Write a object instance to data output stream */ void ${className}::marshal2(ProtocolFormat& wireFormat, Object& o, BinaryWriter& dataOut, BooleanStream& bs) { base.marshal2(wireFormat, o, dataOut, bs); """ if( !properties.isEmpty() || marshallerAware ) out << """ ${jclass.simpleName}& info = (${jclass.simpleName}&) o; """ generateMarshal2Body(out) if( marshallerAware ) out << """ info.afterMarshall(wireFormat); """ out << """ } """ } void generateFactory(PrintWriter out) { out << """/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Marshalling code for Open Wire Format // // // NOTE!: This file is autogenerated - do not modify! // if you need to make a change, please see the Groovy scripts in the // activemq-openwire module // #include "marshal/${className}.hpp" """ for (jclass in concreteClasses) { out << """#include "marshal/${jclass.simpleName}Marshaller.hpp" """ } out << """ using namespace apache::activemq::client::marshal; void MarshallerFactory::configure(ProtocolFormat& format) { """ for (jclass in concreteClasses) { out << """ format.addMarshaller(new ${jclass.simpleName}Marshaller());""" } out << """ } """ } }