From 7b81865491d34e71e5bb1054b923135fa33c4cef Mon Sep 17 00:00:00 2001 From: Daniel Nachbaur Date: Tue, 17 Jan 2017 11:42:00 +0100 Subject: [PATCH] Create CamelCase names for C++ functions from potential snake_case names --- CMakeLists.txt | 6 ++--- bin/zerobufCxx.py | 59 ++++++++++++++++++++++------------------- doc/Changelog.md | 3 +++ tests/serialization.cpp | 38 +++++++++++++------------- tests/serialization.h | 38 +++++++++++++------------- 5 files changed, 75 insertions(+), 69 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2631531..36c971b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,8 @@ -# Copyright (c) HBP 2015-2016 Grigori Chevtchenko +# Copyright (c) HBP 2015-2017 Grigori Chevtchenko cmake_minimum_required(VERSION 3.1 FATAL_ERROR) -project(ZeroBuf VERSION 0.4.0) -set(ZeroBuf_VERSION_ABI 3) +project(ZeroBuf VERSION 0.5.0) +set(ZeroBuf_VERSION_ABI 4) list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMake ${PROJECT_SOURCE_DIR}/zerobuf/share/zerobuf/CMake diff --git a/bin/zerobufCxx.py b/bin/zerobufCxx.py index d910513..8956fcf 100755 --- a/bin/zerobufCxx.py +++ b/bin/zerobufCxx.py @@ -226,8 +226,11 @@ class ClassMember(object): def __init__(self, name, value_type): assert(isinstance(value_type, ValueType)) - self.name = name - self.cxxName = name[0].upper() + str(name[1:]) + # create camelCase from (potential) snake_case property name for C++ + self.name = re.sub(r'_([a-z])', lambda m: m.group(1).upper(), name) + # Keep snake_case for JSON + self.json_name = name + self.cxxName = self.name[0].upper() + str(self.name[1:]) self.value_type = value_type self.allocator_offset = 0 self.qsignal_declaration = self.name + "Changed();" @@ -365,27 +368,27 @@ def get_declaration(self): def from_json(self): if self.value_type.is_zerobuf_type: return 'if( ::zerobuf::hasJSONField( json, "{0}" ))'\ - '{1} ::zerobuf::fromJSON( ::zerobuf::getJSONField( json, "{0}" ), _{0} );'.\ - format(self.name, NEXTLINE) + '{1} ::zerobuf::fromJSON( ::zerobuf::getJSONField( json, "{0}" ), _{2} );'.\ + format(self.json_name, NEXTLINE, self.name) # convert enums to their name as a string if self.value_type.is_enum_type: return 'if( ::zerobuf::hasJSONField( json, "{2}" ))'\ '{3} set{0}( {1}( string_to_{1}( ::zerobuf::fromJSON< std::string >( ::zerobuf::getJSONField( json, "{2}" )))));'.\ - format(self.cxxName, self.value_type.type, self.name, NEXTLINE) + format(self.cxxName, self.value_type.type, self.json_name, NEXTLINE) return 'if( ::zerobuf::hasJSONField( json, "{3}" ))'\ '{4} set{0}( {1}( ::zerobuf::fromJSON< {2} >( ::zerobuf::getJSONField( json, "{3}" ))));'.\ - format(self.cxxName, self.value_type.type, self.value_type.get_data_type(), self.name, NEXTLINE) + format(self.cxxName, self.value_type.type, self.value_type.get_data_type(), self.json_name, NEXTLINE) def to_json(self): if self.value_type.is_zerobuf_type: - return '::zerobuf::toJSON( static_cast< const ::zerobuf::Zerobuf& >( _{0} ), ::zerobuf::getJSONField( json, "{0}" ));'.\ - format(self.name) + return '::zerobuf::toJSON( static_cast< const ::zerobuf::Zerobuf& >( _{0} ), ::zerobuf::getJSONField( json, "{1}" ));'.\ + format(self.name, self.json_name) # convert enums back from their name if self.value_type.is_enum_type: return '::zerobuf::toJSON( std::string( to_string( get{0}( ))), ::zerobuf::getJSONField( json, "{1}" ));'.\ - format(self.cxxName, self.name) + format(self.cxxName, self.json_name) return '::zerobuf::toJSON( {0}( get{1}( )), ::zerobuf::getJSONField( json, "{2}" ));'.\ - format(self.value_type.get_data_type(), self.cxxName, self.name) + format(self.value_type.get_data_type(), self.cxxName, self.json_name) class FixedSizeArray(ClassMember): @@ -398,13 +401,13 @@ def __init__(self, name, type, elem_count, classname): if self.nElems < 2: sys.exit( "Static array of size {0} for field {1} not supported". - format(self.nElems, self.name)) + format(self.nElems, self.json_name)) if self.value_type.size == 0: sys.exit( "Static array of {0} dynamic elements not implemented". format(self.nElems)) if self.value_type.is_zerobuf_type: if self.value_type.size == 0: - sys.exit("Static arrays of empty ZeroBuf (field {0}) not supported".format(self.name)) + sys.exit("Static arrays of empty ZeroBuf (field {0}) not supported".format(self.json_name)) def check_array_changed(self, dst_ptr): return "if( ::memcmp( {0}, {1}, {2} * sizeof( {3} )) == 0 )".\ @@ -533,9 +536,9 @@ def get_declaration(self): return "{0} _{1};".format(self.cxxName, self.name) def from_json(self): - fromJSON = 'if( ::zerobuf::hasJSONField( json, "{0}" ))'.format(self.name) + fromJSON = 'if( ::zerobuf::hasJSONField( json, "{0}" ))'.format(self.json_name) fromJSON += NEXTLINE + '{' - fromJSON += NEXTLINE + ' const Json::Value& field = ::zerobuf::getJSONField( json, "{0}" );'.format(self.name) + fromJSON += NEXTLINE + ' const Json::Value& field = ::zerobuf::getJSONField( json, "{0}" );'.format(self.json_name) if self.value_type.is_zerobuf_type: for i in range(0, self.nElems): @@ -565,7 +568,7 @@ def from_json(self): def to_json(self): toJSON = '{' toJSON += NEXTLINE + ' Json::Value& field = ::zerobuf::getJSONField( json, "{0}" );'.\ - format(self.name) + format(self.json_name) if self.value_type.is_zerobuf_type: for i in range(0, self.nElems): @@ -621,12 +624,12 @@ def get_declaration(self): def from_json(self): return 'if( ::zerobuf::hasJSONField( json, "{0}" ))'\ - '{1} ::zerobuf::fromJSON( ::zerobuf::getJSONField( json, "{0}" ), _{0} );'.\ - format(self.name, NEXTLINE) + '{1} ::zerobuf::fromJSON( ::zerobuf::getJSONField( json, "{0}" ), _{2} );'.\ + format(self.json_name, NEXTLINE, self.name) def to_json(self): - return '::zerobuf::toJSON( static_cast< const ::zerobuf::Zerobuf& >( _{0} ), ::zerobuf::getJSONField( json, "{0}" ));'.\ - format(self.name) + return '::zerobuf::toJSON( static_cast< const ::zerobuf::Zerobuf& >( _{0} ), ::zerobuf::getJSONField( json, "{1}" ));'.\ + format(self.name, self.json_name) class DynamicMember(ClassMember): @@ -639,7 +642,7 @@ def __init__(self, name, type, dynamic_type_index, classname): if self.value_type.is_zerobuf_type: # Dynamic array of (static) Zerobufs if self.value_type.size == 0: - sys.exit("Dynamic arrays of empty ZeroBuf (field {0}) not supported".format(self.name)) + sys.exit("Dynamic arrays of empty ZeroBuf (field {0}) not supported".format(self.json_name)) if self.value_type.is_string: self.qsignal_declaration = self.name + "Changed( QString );" @@ -819,21 +822,21 @@ def from_json(self): if self.value_type.is_string: return 'if( ::zerobuf::hasJSONField( json, "{1}" ))'\ '{2} set{0}( ::zerobuf::fromJSON< std::string >( ::zerobuf::getJSONField( json, "{1}" )));'\ - .format(self.cxxName, self.name, NEXTLINE) + .format(self.cxxName, self.json_name, NEXTLINE) if self.value_type.is_byte_type: return 'if( ::zerobuf::hasJSONField( json, "{0}" ))'\ - '{1} _{0}.fromJSONBinary( ::zerobuf::getJSONField( json, "{0}" ));'\ - .format(self.name, NEXTLINE) + '{1} _{2}.fromJSONBinary( ::zerobuf::getJSONField( json, "{0}" ));'\ + .format(self.json_name, NEXTLINE, self.name) return 'if( ::zerobuf::hasJSONField( json, "{0}" ))'\ - '{1} _{0}.fromJSON( ::zerobuf::getJSONField( json, "{0}" ));'\ - .format(self.name, NEXTLINE) + '{1} _{2}.fromJSON( ::zerobuf::getJSONField( json, "{0}" ));'\ + .format(self.json_name, NEXTLINE, self.name) def to_json(self): if self.value_type.is_string: - return '::zerobuf::toJSON( get{0}String(), ::zerobuf::getJSONField( json, "{1}" ));'.format(self.cxxName, self.name) + return '::zerobuf::toJSON( get{0}String(), ::zerobuf::getJSONField( json, "{1}" ));'.format(self.cxxName, self.json_name) if self.value_type.is_byte_type: - return '_{0}.toJSONBinary( ::zerobuf::getJSONField( json, "{0}" ));'.format(self.name) - return '_{0}.toJSON( ::zerobuf::getJSONField( json, "{0}" ));'.format(self.name) + return '_{0}.toJSONBinary( ::zerobuf::getJSONField( json, "{1}" ));'.format(self.name, self.json_name) + return '_{0}.toJSON( ::zerobuf::getJSONField( json, "{1}" ));'.format(self.name, self.json_name) class FbsEnum(): diff --git a/doc/Changelog.md b/doc/Changelog.md index 291bbe7..180e43a 100644 --- a/doc/Changelog.md +++ b/doc/Changelog.md @@ -2,6 +2,9 @@ # git master +* [77](https://github.com/HBPVIS/ZeroBuf/pull/77): + Create CamelCase names for C++ functions from potential snake_case names + # Release 0.4 (09-12-2016) * [73](https://github.com/HBPVIS/ZeroBuf/pull/73): diff --git a/tests/serialization.cpp b/tests/serialization.cpp index dfa2d6b..ab38d79 100644 --- a/tests/serialization.cpp +++ b/tests/serialization.cpp @@ -1,5 +1,5 @@ -/* Copyright (c) 2015-2016, Human Brain Project +/* Copyright (c) 2015-2017, Human Brain Project * Daniel Nachbaur * Stefan.Eilemann@epfl.ch */ @@ -114,15 +114,15 @@ BOOST_AUTO_TEST_CASE(movedVector) schema.getUbytedynamic().clear(); schema.getUshortdynamic().clear(); schema.getUlongdynamic().clear(); - schema.getUint8_tdynamic().clear(); - schema.getUint16_tdynamic().clear(); - schema.getUint32_tdynamic().clear(); - schema.getUint64_tdynamic().clear(); - schema.getUint128_tdynamic().clear(); - schema.getInt8_tdynamic().clear(); - schema.getInt16_tdynamic().clear(); - schema.getInt32_tdynamic().clear(); - schema.getInt64_tdynamic().clear(); + schema.getUint8Tdynamic().clear(); + schema.getUint16Tdynamic().clear(); + schema.getUint32Tdynamic().clear(); + schema.getUint64Tdynamic().clear(); + schema.getUint128Tdynamic().clear(); + schema.getInt8Tdynamic().clear(); + schema.getInt16Tdynamic().clear(); + schema.getInt32Tdynamic().clear(); + schema.getInt64Tdynamic().clear(); schema.getNesteddynamic().clear(); // realloc on existing zerobufs @@ -171,15 +171,15 @@ BOOST_AUTO_TEST_CASE(compact) schema.getUbytedynamic().clear(); schema.getUshortdynamic().clear(); schema.getUlongdynamic().clear(); - schema.getUint8_tdynamic().clear(); - schema.getUint16_tdynamic().clear(); - schema.getUint32_tdynamic().clear(); - schema.getUint64_tdynamic().clear(); - schema.getUint128_tdynamic().clear(); - schema.getInt8_tdynamic().clear(); - schema.getInt16_tdynamic().clear(); - schema.getInt32_tdynamic().clear(); - schema.getInt64_tdynamic().clear(); + schema.getUint8Tdynamic().clear(); + schema.getUint16Tdynamic().clear(); + schema.getUint32Tdynamic().clear(); + schema.getUint64Tdynamic().clear(); + schema.getUint128Tdynamic().clear(); + schema.getInt8Tdynamic().clear(); + schema.getInt16Tdynamic().clear(); + schema.getInt32Tdynamic().clear(); + schema.getInt64Tdynamic().clear(); schema.getNesteddynamic().clear(); schema.getNestedMember().getName().clear(); diff --git a/tests/serialization.h b/tests/serialization.h index cdb29c8..98392b8 100644 --- a/tests/serialization.h +++ b/tests/serialization.h @@ -1,5 +1,5 @@ -/* Copyright (c) 2015-2016, Human Brain Project +/* Copyright (c) 2015-2017, Human Brain Project * Daniel Nachbaur */ @@ -51,15 +51,15 @@ test::TestSchema getTestObject() SETVALUES(::zerobuf::byte_t, Ubyte); SETVALUES(uint16_t, Ushort); SETVALUES(uint64_t, Ulong); - SETVALUES(uint8_t, Uint8_t); - SETVALUES(uint16_t, Uint16_t); - SETVALUES(uint32_t, Uint32_t); - SETVALUES(uint64_t, Uint64_t); - SETVALUES(::zerobuf::uint128_t, Uint128_t); - SETVALUES(int8_t, Int8_t); - SETVALUES(int16_t, Int16_t); - SETVALUES(int32_t, Int32_t); - SETVALUES(int64_t, Int64_t); + SETVALUES(uint8_t, Uint8T); + SETVALUES(uint16_t, Uint16T); + SETVALUES(uint32_t, Uint32T); + SETVALUES(uint64_t, Uint64T); + SETVALUES(::zerobuf::uint128_t, Uint128T); + SETVALUES(int8_t, Int8T); + SETVALUES(int16_t, Int16T); + SETVALUES(int32_t, Int32T); + SETVALUES(int64_t, Int64T); object.setBoolvalue( true ); object.setStringvalue( "testmessage" ); @@ -128,15 +128,15 @@ void checkTestObject( const test::TestSchema& object ) TESTVALUES(::zerobuf::byte_t, Ubyte); TESTVALUES(uint16_t, Ushort); TESTVALUES(uint64_t, Ulong); - TESTVALUES(uint8_t, Uint8_t); - TESTVALUES(uint16_t, Uint16_t); - TESTVALUES(uint32_t, Uint32_t); - TESTVALUES(uint64_t, Uint64_t); - TESTVALUES(::zerobuf::uint128_t, Uint128_t); - TESTVALUES(int8_t, Int8_t); - TESTVALUES(int16_t, Int16_t); - TESTVALUES(int32_t, Int32_t); - TESTVALUES(int64_t, Int64_t); + TESTVALUES(uint8_t, Uint8T); + TESTVALUES(uint16_t, Uint16T); + TESTVALUES(uint32_t, Uint32T); + TESTVALUES(uint64_t, Uint64T); + TESTVALUES(::zerobuf::uint128_t, Uint128T); + TESTVALUES(int8_t, Int8T); + TESTVALUES(int16_t, Int16T); + TESTVALUES(int32_t, Int32T); + TESTVALUES(int64_t, Int64T); BOOST_CHECK( object.getBoolvalue( )); BOOST_CHECK_EQUAL( object.getStringvalueString(), "testmessage" ); BOOST_CHECK_EQUAL( object.getEnumeration(), test::TestEnum::SECOND );