This is an automated email from the ASF dual-hosted git repository.
kojiromike pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/avro.git
The following commit(s) were added to refs/heads/master by this push:
new 3b5cdb9 AVRO-3163: Delete gen-cppcode.py
3b5cdb9 is described below
commit 3b5cdb919ca2b40bb67d806554e98a008dfa07b1
Author: Michael A. Smith <[email protected]>
AuthorDate: Wed Jun 23 20:54:30 2021 -0400
AVRO-3163: Delete gen-cppcode.py
Per conversation on mailing list, this file is no longer used.
---
lang/c++/scripts/gen-cppcode.py | 685 ----------------------------------------
1 file changed, 685 deletions(-)
diff --git a/lang/c++/scripts/gen-cppcode.py b/lang/c++/scripts/gen-cppcode.py
deleted file mode 100644
index 42750ee..0000000
--- a/lang/c++/scripts/gen-cppcode.py
+++ /dev/null
@@ -1,685 +0,0 @@
-#!/usr/bin/python
-
-license = '''/**
- * 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
- *
- * https://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.
- */
-'''
-
-headers = '''
-#include <stdint.h>
-#include <string>
-#include <vector>
-#include <map>
-#include "Boost.hh"
-#include "Exception.hh"
-#include "AvroSerialize.hh"
-#include "AvroParse.hh"
-#include "Layout.hh"
-'''
-
-done = False
-
-typeToC= { 'int' : 'int32_t', 'long' :'int64_t', 'float' : 'float', 'double' :
'double',
-'boolean' : 'bool', 'null': 'avro::Null', 'string' : 'std::string', 'bytes' :
'std::vector<uint8_t>'}
-
-structList = []
-structNames = {}
-forwardDeclareList = []
-
-def addStruct(name, declaration) :
- if not structNames.has_key(name) :
- structNames[name] = True
- structList.append(declaration)
-
-def addForwardDeclare(declaration) :
- code = 'struct ' + declaration + ';'
- forwardDeclareList.append(code)
-
-def doPrimitive(type):
- return (typeToC[type], type)
-
-def doSymbolic(args):
- addForwardDeclare(args[1])
- return (args[1], args[1])
-
-def addLayout(name, type, var) :
- result = ' add(new $offsetType$(offset + offsetof($name$,
$var$)));\n'
- result = result.replace('$name$', name)
- if typeToC.has_key(type) :
- offsetType = 'avro::PrimitiveLayout'
- else :
- offsetType = type+ '_Layout'
- result = result.replace('$offsetType$', offsetType)
- result = result.replace('$var$', var)
- return result;
-
-def addSimpleLayout(type) :
- result = ' add(new $offsetType$);\n'
- if typeToC.has_key(type) :
- offsetType = 'avro::PrimitiveLayout'
- else :
- offsetType = type+ '_Layout'
- return result.replace('$offsetType$', offsetType)
-
-recordfieldTemplate = '$type$ $name$\n'
-recordTemplate = '''struct $name$ {
-
- $name$ () :
-$initializers$
- { }
-
-$recordfields$};
-
-template <typename Serializer>
-inline void serialize(Serializer &s, const $name$ &val, const boost::true_type
&) {
- s.writeRecord();
-$serializefields$ s.writeRecordEnd();
-}
-
-template <typename Parser>
-inline void parse(Parser &p, $name$ &val, const boost::true_type &) {
- p.readRecord();
-$parsefields$ p.readRecordEnd();
-}
-
-class $name$_Layout : public avro::CompoundLayout {
- public:
- $name$_Layout(size_t offset = 0) :
- CompoundLayout(offset)
- {
-$offsetlist$ }
-};
-'''
-
-def doRecord(args):
- structDef = recordTemplate;
- typename = args[1];
- structDef = structDef.replace('$name$', typename);
- fields = ''
- serializefields = ''
- parsefields = ''
- initlist = ''
- offsetlist = ''
- end = False
- while not end:
- line = getNextLine()
- if line[0] == 'end':
- end = True
- initlist = initlist.rstrip(',\n')
- elif line[0] == 'name':
- fieldname = line[1]
- fieldline = getNextLine()
- fieldtypename, fieldtype = processType(fieldline)
- fields += ' ' + fieldtypename + ' ' + fieldname + ';\n'
- serializefields += ' serialize(s, val.' + fieldname + ');\n'
- initlist += ' ' + fieldname + '(),\n'
- parsefields += ' parse(p, val.' + fieldname + ');\n'
- offsetlist += addLayout(typename, fieldtype, fieldname)
- structDef = structDef.replace('$initializers$', initlist)
- structDef = structDef.replace('$recordfields$', fields)
- structDef = structDef.replace('$serializefields$', serializefields)
- structDef = structDef.replace('$parsefields$', parsefields)
- structDef = structDef.replace('$offsetlist$', offsetlist)
- addStruct(typename, structDef)
- return (typename,typename)
-
-uniontypestemplate = 'typedef $type$ Choice$N$Type'
-unionTemplate = '''struct $name$ {
-
-$typedeflist$
- typedef void* (*GenericSetter)($name$ *, int64_t);
-
- $name$() :
- choice(0),
- value(T0()),
- genericSetter(&$name$::genericSet)
- { }
-
-$setfuncs$
-#ifdef AVRO_BOOST_NO_ANYREF
- template<typename T>
- const T &getValue() const {
- const T *ptr = boost::any_cast<T>(&value);
- return *ptr;
- }
-#else
- template<typename T>
- const T &getValue() const {
- return boost::any_cast<const T&>(value);
- }
-#endif
-
- static void *genericSet($name$ *u, int64_t choice) {
- boost::any *val = &(u->value);
- void *data = NULL;
- switch (choice) {$switch$
- }
- return data;
- }
-
- int64_t choice;
- boost::any value;
- GenericSetter genericSetter;
-};
-
-template <typename Serializer>
-inline void serialize(Serializer &s, const $name$ &val, const boost::true_type
&) {
- s.writeUnion(val.choice);
- switch(val.choice) {
-$switchserialize$ default :
- throw avro::Exception("Unrecognized union choice");
- }
-}
-
-template <typename Parser>
-inline void parse(Parser &p, $name$ &val, const boost::true_type &) {
- val.choice = p.readUnion();
- switch(val.choice) {
-$switchparse$ default :
- throw avro::Exception("Unrecognized union choice");
- }
-}
-
-class $name$_Layout : public avro::CompoundLayout {
- public:
- $name$_Layout(size_t offset = 0) :
- CompoundLayout(offset)
- {
- add(new avro::PrimitiveLayout(offset + offsetof($name$, choice)));
- add(new avro::PrimitiveLayout(offset + offsetof($name$,
genericSetter)));
-$offsetlist$ }
-};
-'''
-
-unionser = ' case $choice$:\n serialize(s, val.getValue< $type$
>());\n break;\n'
-unionpar = ' case $choice$:\n { $type$ chosenVal; parse(p,
chosenVal); val.value = chosenVal; }\n break;\n'
-
-setfunc = ''' void set_$name$(const $type$ &val) {
- choice = $N$;
- value = val;
- };\n'''
-
-switcher = '''\n case $N$:
- *val = T$N$();
- data = boost::any_cast<T$N$>(val);
- break;'''
-
-
-def doUnion(args):
- structDef = unionTemplate
- uniontypes = ''
- switchserialize= ''
- switchparse= ''
- typename = 'Union_of'
- setters = ''
- switches = ''
- offsetlist = ''
- i = 0
- end = False
- while not end:
- line = getNextLine()
- if line[0] == 'end': end = True
- else :
- uniontype, name = processType(line)
- typename += '_' + name
- uniontypes += ' ' + 'typedef ' + uniontype + ' T' + str(i) +
';\n'
- switch = unionser
- switch = switch.replace('$choice$', str(i))
- switch = switch.replace('$type$', uniontype)
- switchserialize += switch
- switch = unionpar
- switch = switch.replace('$choice$', str(i))
- switch = switch.replace('$type$', uniontype)
- switchparse += switch
- setter = setfunc
- setter = setter.replace('$name$', name)
- setter = setter.replace('$type$', uniontype)
- setter = setter.replace('$N$', str(i))
- setters += setter
- switch = switcher
- switches += switch.replace('$N$', str(i))
- offsetlist += addSimpleLayout(name)
- i+= 1
- structDef = structDef.replace('$name$', typename)
- structDef = structDef.replace('$typedeflist$', uniontypes)
- structDef = structDef.replace('$switchserialize$', switchserialize)
- structDef = structDef.replace('$switchparse$', switchparse)
- structDef = structDef.replace('$setfuncs$', setters)
- structDef = structDef.replace('$switch$', switches)
- structDef = structDef.replace('$offsetlist$', offsetlist)
- addStruct(typename, structDef)
- return (typename,typename)
-
-enumTemplate = '''struct $name$ {
-
- enum EnumSymbols {
- $enumsymbols$
- };
-
- $name$() :
- value($firstsymbol$)
- { }
-
- EnumSymbols value;
-};
-
-template <typename Serializer>
-inline void serialize(Serializer &s, const $name$ &val, const boost::true_type
&) {
- s.writeEnum(val.value);
-}
-
-template <typename Parser>
-inline void parse(Parser &p, $name$ &val, const boost::true_type &) {
- val.value = static_cast<$name$::EnumSymbols>(p.readEnum());
-}
-
-class $name$_Layout : public avro::CompoundLayout {
- public:
- $name$_Layout(size_t offset = 0) :
- CompoundLayout(offset)
- {
- add(new avro::PrimitiveLayout(offset + offsetof($name$, value)));
- }
-};
-'''
-
-def doEnum(args):
- structDef = enumTemplate;
- typename = args[1]
- structDef = structDef.replace('$name$', typename)
- end = False
- symbols = '';
- firstsymbol = '';
- while not end:
- line = getNextLine()
- if line[0] == 'end': end = True
- elif line[0] == 'name':
- if symbols== '' :
- firstsymbol = line[1]
- else :
- symbols += ', '
- symbols += line[1]
- else: print "error"
- structDef = structDef.replace('$enumsymbols$', symbols);
- structDef = structDef.replace('$firstsymbol$', firstsymbol);
- addStruct(typename, structDef)
- return (typename,typename)
-
-arrayTemplate = '''struct $name$ {
- typedef $valuetype$ ValueType;
- typedef std::vector<ValueType> ArrayType;
- typedef ValueType* (*GenericSetter)($name$ *);
-
- $name$() :
- value(),
- genericSetter(&$name$::genericSet)
- { }
-
- static ValueType *genericSet($name$ *array) {
- array->value.push_back(ValueType());
- return &array->value.back();
- }
-
- void addValue(const ValueType &val) {
- value.push_back(val);
- }
-
- ArrayType value;
- GenericSetter genericSetter;
-
-};
-
-template <typename Serializer>
-inline void serialize(Serializer &s, const $name$ &val, const boost::true_type
&) {
- const size_t size = val.value.size();
- if(size) {
- s.writeArrayBlock(size);
- for(size_t i = 0; i < size; ++i) {
- serialize(s, val.value[i]);
- }
- }
- s.writeArrayEnd();
-}
-
-template <typename Parser>
-inline void parse(Parser &p, $name$ &val, const boost::true_type &) {
- val.value.clear();
- while(1) {
- int size = p.readArrayBlockSize();
- if(size > 0) {
- val.value.reserve(val.value.size() + size);
- while (size-- > 0) {
- val.value.push_back($name$::ValueType());
- parse(p, val.value.back());
- }
- }
- else {
- break;
- }
- }
-}
-
-class $name$_Layout : public avro::CompoundLayout {
- public:
- $name$_Layout(size_t offset = 0) :
- CompoundLayout(offset)
- {
- add(new avro::PrimitiveLayout(offset + offsetof($name$,
genericSetter)));
-$offsetlist$ }
-};
-'''
-
-def doArray(args):
- structDef = arrayTemplate
- line = getNextLine()
- arraytype, typename = processType(line)
- offsetlist = addSimpleLayout(typename)
- typename = 'Array_of_' + typename
-
- structDef = structDef.replace('$name$', typename)
- structDef = structDef.replace('$valuetype$', arraytype)
- structDef = structDef.replace('$offsetlist$', offsetlist)
-
- line = getNextLine()
- if line[0] != 'end': print 'error'
-
- addStruct(typename, structDef)
- return (typename,typename)
-
-mapTemplate = '''struct $name$ {
- typedef $valuetype$ ValueType;
- typedef std::map<std::string, ValueType> MapType;
- typedef ValueType* (*GenericSetter)($name$ *, const std::string &);
-
- $name$() :
- value(),
- genericSetter(&$name$::genericSet)
- { }
-
- void addValue(const std::string &key, const ValueType &val) {
- value.insert(MapType::value_type(key, val));
- }
-
- static ValueType *genericSet($name$ *map, const std::string &key) {
- map->value[key] = ValueType();
- return &(map->value[key]);
- }
-
- MapType value;
- GenericSetter genericSetter;
-
-};
-
-template <typename Serializer>
-inline void serialize(Serializer &s, const $name$ &val, const boost::true_type
&) {
- if(val.value.size()) {
- s.writeMapBlock(val.value.size());
- $name$::MapType::const_iterator iter = val.value.begin();
- $name$::MapType::const_iterator end = val.value.end();
- while(iter!=end) {
- serialize(s, iter->first);
- serialize(s, iter->second);
- ++iter;
- }
- }
- s.writeMapEnd();
-}
-
-template <typename Parser>
-inline void parse(Parser &p, $name$ &val, const boost::true_type &) {
- val.value.clear();
- while(1) {
- int size = p.readMapBlockSize();
- if(size > 0) {
- while (size-- > 0) {
- std::string key;
- parse(p, key);
- $name$::ValueType m;
- parse(p, m);
- val.value.insert($name$::MapType::value_type(key, m));
- }
- }
- else {
- break;
- }
- }
-}
-
-class $name$_Layout : public avro::CompoundLayout {
- public:
- $name$_Layout(size_t offset = 0) :
- CompoundLayout(offset)
- {
- add(new avro::PrimitiveLayout(offset + offsetof($name$,
genericSetter)));
-$offsetlist$ }
-};
-'''
-
-def doMap(args):
- structDef = mapTemplate
- line = getNextLine() # must be string
- line = getNextLine()
- maptype, typename = processType(line);
-
- offsetlist = addSimpleLayout(typename)
- typename = 'Map_of_' + typename
-
- structDef = structDef.replace('$name$', typename)
- structDef = structDef.replace('$valuetype$', maptype)
- structDef = structDef.replace('$offsetlist$', offsetlist)
-
- line = getNextLine()
- if line[0] != 'end': print 'error'
- addStruct(typename, structDef)
- return (typename,typename)
-
-fixedTemplate = '''struct $name$ {
- enum {
- fixedSize = $N$
- };
-
- $name$() {
- memset(value, 0, sizeof(value));
- }
-
- uint8_t value[fixedSize];
-};
-
-template <typename Serializer>
-inline void serialize(Serializer &s, const $name$ &val, const boost::true_type
&) {
- s.writeFixed(val.value);
-}
-
-template <typename Parser>
-inline void parse(Parser &p, $name$ &val, const boost::true_type &) {
- p.readFixed(val.value);
-}
-
-class $name$_Layout : public avro::CompoundLayout {
- public:
- $name$_Layout(size_t offset = 0) :
- CompoundLayout(offset)
- {
- add(new avro::PrimitiveLayout(offset + offsetof($name$, value)));
- }
-};
-'''
-
-def doFixed(args):
- structDef = fixedTemplate
- typename = args[1]
- size = args[2]
-
- line = getNextLine()
- if line[0] != 'end': print 'error'
-
- structDef = structDef.replace('$name$', typename)
- structDef = structDef.replace('$N$', size)
- addStruct(typename, structDef)
- return (typename,typename)
-
-primitiveTemplate = '''struct $name$ {
- $type$ value;
-};
-
-template <typename Serializer>
-inline void serialize(Serializer &s, const $name$ &val, const boost::true_type
&) {
- s.writeValue(val.value);
-}
-
-template <typename Parser>
-inline void parse(Parser &p, $name$ &val, const boost::true_type &) {
- p.readValue(val.value);
-}
-
-class $name$_Layout : public avro::CompoundLayout {
- public:
- $name$_Layout(size_t offset = 0) :
- CompoundLayout(offset)
- {
- add(new avro::PrimitiveLayout(offset + offsetof($name$, value)));
- }
-};
-'''
-
-def doPrimitiveStruct(type):
- structDef = primitiveTemplate
- name = type.capitalize()
- structDef = structDef.replace('$name$', name);
- structDef = structDef.replace('$type$', typeToC[type]);
- addStruct(name, structDef)
-
-compoundBuilder= { 'record' : doRecord, 'union' : doUnion, 'enum' : doEnum,
-'map' : doMap, 'array' : doArray, 'fixed' : doFixed, 'symbolic' : doSymbolic }
-
-def processType(inputs) :
- type = inputs[0]
- if typeToC.has_key(type) :
- result = doPrimitive(type)
- else :
- func = compoundBuilder[type]
- result = func(inputs)
- return result
-
-def generateCode() :
- inputs = getNextLine()
- type = inputs[0]
- if typeToC.has_key(type) :
- doPrimitiveStruct(type)
- else :
- func = compoundBuilder[type]
- func(inputs)
-
-def getNextLine():
- try:
- line = raw_input()
- except:
- line = '';
- globals()["done"] = True
-
- if line == '':
- globals()["done"] = True
- return line.split(' ')
-
-def writeHeader(filebase, namespace):
- headerstring = "%s_%s_hh__" % (namespace, filebase)
-
- print license
- print "#ifndef %s" % headerstring
- print "#define %s" % headerstring
- print headers
- print "namespace %s {\n" % namespace
-
- for x in forwardDeclareList:
- print "%s\n" % x
-
- for x in structList:
- print
"/*----------------------------------------------------------------------------------*/\n"
- print "%s\n" % x
-
- print "\n} // namespace %s\n" % namespace
-
- print "namespace avro {\n"
- for x in structNames:
- print 'template <> struct is_serializable<%s::%s> : public
boost::true_type{};' % (namespace, x)
-
- print "\n} // namespace avro\n"
-
- print "#endif // %s" % headerstring
-
-
-def usage():
- print "-h, --help print this helpful message"
- print "-i, --input=FILE input file to read (default is stdin)"
- print "-o, --output=PATH output file to generate (default is stdout)"
- print "-n, --namespace=LABEL namespace for schema (default is avrouser)"
-
-if __name__ == "__main__":
- from sys import argv
- import getopt,sys
-
- try:
- opts, args = getopt.getopt(argv[1:], "hi:o:n:", ["help", "input=",
"output=", "namespace="])
-
- except getopt.GetoptError, err:
- print str(err)
- usage()
- sys.exit(2)
-
- namespace = 'avrouser'
-
- savein = sys.stdin
- saveout = sys.stdout
- inputFile = False
- outputFile = False
- outputFileBase = 'AvroGenerated'
-
- for o, a in opts:
- if o in ("-i", "--input"):
- try:
- inputFile = open(a, 'r')
- sys.stdin = inputFile
- except:
- print "Could not open file " + a
- sys.exit()
- elif o in ("-o", "--output"):
- try:
- outputFile = open(a, 'w')
- sys.stdout = outputFile
- except:
- print "Could not open file " + a
- outputFileBase = a.rstrip('.hp') # strip for .h, .hh, .hpp
- elif o in ("-n", "--namespace"):
- namespace = a
- elif o in ("-h", "--help"):
- usage()
- sys.exit()
- else:
- print "Unhandled option: " + o
- usage()
- sys.exit()
-
- generateCode()
- writeHeader(outputFileBase, namespace)
-
- sys.stdin = savein
- sys.stdout = saveout
- if inputFile:
- inputFile.close()
- if outputFile:
- outputFile.close()
-