OpenDDLParser: latest greatest.
parent
56a9d5c659
commit
afb2f3036e
|
@ -732,10 +732,12 @@ SET ( openddl_parser_SRCS
|
||||||
../contrib/openddlparser/code/OpenDDLCommon.cpp
|
../contrib/openddlparser/code/OpenDDLCommon.cpp
|
||||||
../contrib/openddlparser/code/OpenDDLExport.cpp
|
../contrib/openddlparser/code/OpenDDLExport.cpp
|
||||||
../contrib/openddlparser/code/Value.cpp
|
../contrib/openddlparser/code/Value.cpp
|
||||||
|
../contrib/openddlparser/code/OpenDDLStream.cpp
|
||||||
../contrib/openddlparser/include/openddlparser/OpenDDLParser.h
|
../contrib/openddlparser/include/openddlparser/OpenDDLParser.h
|
||||||
../contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h
|
../contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h
|
||||||
../contrib/openddlparser/include/openddlparser/OpenDDLCommon.h
|
../contrib/openddlparser/include/openddlparser/OpenDDLCommon.h
|
||||||
../contrib/openddlparser/include/openddlparser/OpenDDLExport.h
|
../contrib/openddlparser/include/openddlparser/OpenDDLExport.h
|
||||||
|
../contrib/openddlparser/include/openddlparser/OpenDDLStream.h
|
||||||
../contrib/openddlparser/include/openddlparser/DDLNode.h
|
../contrib/openddlparser/include/openddlparser/DDLNode.h
|
||||||
../contrib/openddlparser/include/openddlparser/Value.h
|
../contrib/openddlparser/include/openddlparser/Value.h
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,18 +3,40 @@ PROJECT( OpenDDL-Parser )
|
||||||
SET ( OPENDDL_PARSER_VERSION_MAJOR 0 )
|
SET ( OPENDDL_PARSER_VERSION_MAJOR 0 )
|
||||||
SET ( OPENDDL_PARSER_VERSION_MINOR 1 )
|
SET ( OPENDDL_PARSER_VERSION_MINOR 1 )
|
||||||
SET ( OPENDDL_PARSER_VERSION_PATCH 0 )
|
SET ( OPENDDL_PARSER_VERSION_PATCH 0 )
|
||||||
SET ( OPENDDL_PARSER_VERSION ${CPPCORE_VERSION_MAJOR}.${CPPCORE_VERSION_MINOR}.${CPPCORE_VERSION_PATCH} )
|
SET ( OPENDDL_PARSER_VERSION ${OPENDDL_PARSER_VERSION_MAJOR}.${OPENDDL_PARSER_VERSION_MINOR}.${OPENDDL_PARSER_VERSION_PATCH} )
|
||||||
SET ( PROJECT_VERSION "${OPENDDL_PARSER_VERSION}" )
|
SET ( PROJECT_VERSION "${OPENDDL_PARSER_VERSION}" )
|
||||||
|
|
||||||
|
option( DDL_USE_CPP11 "Set to ON to use C++11 features ( always on on windows )." ON )
|
||||||
|
option( DDL_DEBUG_OUTPUT "Set to ON to use output debug texts" OFF )
|
||||||
|
option( DDL_STATIC_LIBRARY "Set to ON to build static libary of OpenDDL Parser." ON )
|
||||||
|
option( COVERALLS "Generate coveralls data" OFF )
|
||||||
|
|
||||||
|
if ( DDL_USE_CPP11 )
|
||||||
|
if( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX )
|
||||||
|
set( OPENDDL_CXXFLAGS -std=c++0x )
|
||||||
|
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
set( OPENDDL_CXXFLAGS --std=c++11 )
|
||||||
|
endif()
|
||||||
|
else( DDL_USE_CPP11 )
|
||||||
|
add_definitions( -DOPENDDL_NO_USE_CPP11 )
|
||||||
|
endif( DDL_USE_CPP11)
|
||||||
|
|
||||||
if( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX )
|
if( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX )
|
||||||
find_package(Threads)
|
find_package(Threads)
|
||||||
else()
|
else()
|
||||||
add_definitions( -D_CRT_SECURE_NO_WARNINGS )
|
add_definitions( -D_CRT_SECURE_NO_WARNINGS )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if ( DDL_STATIC_LIBRARY )
|
||||||
|
add_definitions( -DOPENDDL_STATIC_LIBARY )
|
||||||
|
endif()
|
||||||
|
|
||||||
add_definitions( -DOPENDDLPARSER_BUILD )
|
add_definitions( -DOPENDDLPARSER_BUILD )
|
||||||
add_definitions( -DOPENDDL_NO_USE_CPP11 )
|
|
||||||
add_definitions( -D_VARIADIC_MAX=10 )
|
add_definitions( -D_VARIADIC_MAX=10 )
|
||||||
|
add_definitions( -DGTEST_HAS_PTHREAD=0 )
|
||||||
|
if ( DDL_DEBUG_OUTPUT )
|
||||||
|
add_definitions( -DDDL_DEBUG_HEADER_NAME)
|
||||||
|
endif()
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(
|
INCLUDE_DIRECTORIES(
|
||||||
./
|
./
|
||||||
|
@ -24,9 +46,10 @@ INCLUDE_DIRECTORIES(
|
||||||
)
|
)
|
||||||
|
|
||||||
link_directories(
|
link_directories(
|
||||||
./
|
${CMAKE_HOME_DIRECTORY}/lib
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake )
|
||||||
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib )
|
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib )
|
||||||
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib )
|
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib )
|
||||||
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/bin )
|
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/bin )
|
||||||
|
@ -40,18 +63,38 @@ if( WIN32 AND NOT CYGWIN )
|
||||||
endif()
|
endif()
|
||||||
elseif( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX )
|
elseif( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX )
|
||||||
# Update if necessary
|
# Update if necessary
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic -std=c++0x")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic ${OPENDDL_CXXFLAGS}")
|
||||||
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic -std=c++11")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic ${OPENDDL_CXXFLAGS} -Wwrite-strings")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (COVERALLS)
|
||||||
|
include(Coveralls)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Include the doc component.
|
||||||
|
FIND_PACKAGE( doxygen )
|
||||||
|
IF ( DOXYGEN_FOUND )
|
||||||
|
CONFIGURE_FILE( doc/openddlparser_doc.in doc/doxygenfile @ONLY )
|
||||||
|
ADD_CUSTOM_TARGET( doc ALL ${DOXYGEN_EXECUTABLE} doc/doxygenfile
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
COMMENT "Generating API documentation with Doxygen" VERBATIM )
|
||||||
|
ENDIF ( DOXYGEN_FOUND )
|
||||||
|
|
||||||
SET ( openddl_parser_src
|
SET ( openddl_parser_src
|
||||||
|
code/OpenDDLCommon.cpp
|
||||||
|
code/OpenDDLExport.cpp
|
||||||
code/OpenDDLParser.cpp
|
code/OpenDDLParser.cpp
|
||||||
|
code/OpenDDLStream.cpp
|
||||||
code/DDLNode.cpp
|
code/DDLNode.cpp
|
||||||
code/Value.cpp
|
code/Value.cpp
|
||||||
|
include/openddlparser/OpenDDLCommon.h
|
||||||
|
include/openddlparser/OpenDDLExport.h
|
||||||
include/openddlparser/OpenDDLParser.h
|
include/openddlparser/OpenDDLParser.h
|
||||||
include/openddlparser/OpenDDLParserUtils.h
|
include/openddlparser/OpenDDLParserUtils.h
|
||||||
include/openddlparser/OpenDDLCommon.h
|
include/openddlparser/OpenDDLStream.h
|
||||||
include/openddlparser/DDLNode.h
|
include/openddlparser/DDLNode.h
|
||||||
include/openddlparser/Value.h
|
include/openddlparser/Value.h
|
||||||
README.md
|
README.md
|
||||||
|
@ -59,6 +102,69 @@ SET ( openddl_parser_src
|
||||||
|
|
||||||
SOURCE_GROUP( code FILES ${openddl_parser_src} )
|
SOURCE_GROUP( code FILES ${openddl_parser_src} )
|
||||||
|
|
||||||
ADD_LIBRARY( openddl_parser SHARED
|
if ( DDL_STATIC_LIBRARY )
|
||||||
|
ADD_LIBRARY( openddl_parser STATIC
|
||||||
${openddl_parser_src}
|
${openddl_parser_src}
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
ADD_LIBRARY( openddl_parser SHARED
|
||||||
|
${openddl_parser_src}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
SET ( GTEST_PATH contrib/gtest-1.7.0 )
|
||||||
|
|
||||||
|
SET ( gtest_src
|
||||||
|
${GTEST_PATH}/src/gtest-death-test.cc
|
||||||
|
${GTEST_PATH}/src/gtest-filepath.cc
|
||||||
|
${GTEST_PATH}/src/gtest-internal-inl.h
|
||||||
|
${GTEST_PATH}/src/gtest-port.cc
|
||||||
|
${GTEST_PATH}/src/gtest-printers.cc
|
||||||
|
${GTEST_PATH}/src/gtest-test-part.cc
|
||||||
|
${GTEST_PATH}/src/gtest-typed-test.cc
|
||||||
|
${GTEST_PATH}/src/gtest.cc
|
||||||
|
${GTEST_PATH}/src/gtest_main.cc
|
||||||
)
|
)
|
||||||
|
|
||||||
|
SET( openddl_parser_unittest_src
|
||||||
|
test/UnitTestCommon.h
|
||||||
|
test/DDLNodeTest.cpp
|
||||||
|
test/OpenDDLCommonTest.cpp
|
||||||
|
test/OpenDDLExportTest.cpp
|
||||||
|
test/OpenDDLParserTest.cpp
|
||||||
|
test/OpenDDLParserUtilsTest.cpp
|
||||||
|
test/OpenDDLStreamTest.cpp
|
||||||
|
test/OpenDDLIntegrationTest.cpp
|
||||||
|
test/ValueTest.cpp
|
||||||
|
test/OpenDDLDefectsTest.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
SOURCE_GROUP( code FILES ${openddl_parser_unittest_src} )
|
||||||
|
SOURCE_GROUP( gtest FILES ${gtest_src} )
|
||||||
|
|
||||||
|
ADD_EXECUTABLE( openddl_parser_unittest
|
||||||
|
${gtest_src}
|
||||||
|
${openddl_parser_unittest_src}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries( openddl_parser_unittest openddl_parser ${CMAKE_THREAD_LIBS_INIT} )
|
||||||
|
|
||||||
|
SET( openddl_parser_demo_src
|
||||||
|
demo/main.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
if (COVERALLS)
|
||||||
|
set(COVERAGE_SRCS ${gtest_src} ${openddl_parser_unittest_src} )
|
||||||
|
|
||||||
|
# Create the coveralls target.
|
||||||
|
coveralls_setup(
|
||||||
|
"${COVERAGE_SRCS}" # The source files.
|
||||||
|
ON # If we should upload.
|
||||||
|
"${PROJECT_SOURCE_DIR}/cmake/") # (Optional) Alternate project cmake module path.
|
||||||
|
endif()
|
||||||
|
|
||||||
|
ADD_EXECUTABLE( openddl_parser_demo
|
||||||
|
${openddl_parser_demo_src}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries( openddl_parser_demo openddl_parser )
|
||||||
|
|
|
@ -12,5 +12,8 @@ Improvements value interface, serveral bugfixes.
|
||||||
- Henry Read ( henrya2 ):
|
- Henry Read ( henrya2 ):
|
||||||
Static build option, Interface improvements
|
Static build option, Interface improvements
|
||||||
|
|
||||||
|
- (wise86-android)
|
||||||
|
fix several mem-leaks
|
||||||
|
|
||||||
- Paul Holland ( pkholland ):
|
- Paul Holland ( pkholland ):
|
||||||
Bugfixes.
|
Bugfixes.
|
||||||
|
|
|
@ -11,7 +11,7 @@ Current coverity check status:
|
||||||
<img alt="Coverity Scan Build Status"
|
<img alt="Coverity Scan Build Status"
|
||||||
src="https://scan.coverity.com/projects/5606/badge.svg"/>
|
src="https://scan.coverity.com/projects/5606/badge.svg"/>
|
||||||
</a>
|
</a>
|
||||||
|
Current test coverage:[![Coverage Status](https://coveralls.io/repos/github/kimkulling/openddl-parser/badge.svg?branch=master)](https://coveralls.io/github/kimkulling/openddl-parser?branch=cpp_coveralls)
|
||||||
Get the source code
|
Get the source code
|
||||||
===================
|
===================
|
||||||
You can get the code from our git repository, which is located at GitHub. You can clone the repository with the following command:
|
You can get the code from our git repository, which is located at GitHub. You can clone the repository with the following command:
|
||||||
|
@ -25,7 +25,7 @@ After installing it you can open a console and enter:
|
||||||
|
|
||||||
> cmake CMakeLists.txt
|
> cmake CMakeLists.txt
|
||||||
|
|
||||||
This command will generate a build environment for your installed build enrironment ( for Visual-Studio-users the project files will be generated, for gcc-users the makefiles will be generated ).
|
This command will generate a build environment for your preferred build tool ( for Visual-Studio-users the project files will be generated, for gcc-users the makefiles will be generated ).
|
||||||
When using an IDE open the IDE and run the build. When using GNU-make type in your console:
|
When using an IDE open the IDE and run the build. When using GNU-make type in your console:
|
||||||
|
|
||||||
> make
|
> make
|
||||||
|
|
|
@ -191,6 +191,10 @@ Reference *DDLNode::getReferences() const {
|
||||||
return m_references;
|
return m_references;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DDLNode::dump(IOStreamBase &stream) {
|
||||||
|
// Todo!
|
||||||
|
}
|
||||||
|
|
||||||
DDLNode *DDLNode::create( const std::string &type, const std::string &name, DDLNode *parent ) {
|
DDLNode *DDLNode::create( const std::string &type, const std::string &name, DDLNode *parent ) {
|
||||||
const size_t idx( s_allocatedNodes.size() );
|
const size_t idx( s_allocatedNodes.size() );
|
||||||
DDLNode *node = new DDLNode( type, name, idx, parent );
|
DDLNode *node = new DDLNode( type, name, idx, parent );
|
||||||
|
|
|
@ -29,60 +29,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
BEGIN_ODDLPARSER_NS
|
BEGIN_ODDLPARSER_NS
|
||||||
|
|
||||||
StreamFormatterBase::StreamFormatterBase() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
StreamFormatterBase::~StreamFormatterBase() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string StreamFormatterBase::format( const std::string &statement ) {
|
|
||||||
std::string tmp( statement );
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
IOStreamBase::IOStreamBase( StreamFormatterBase *formatter )
|
|
||||||
: m_formatter( formatter )
|
|
||||||
, m_file( ddl_nullptr ) {
|
|
||||||
if (ddl_nullptr == m_formatter) {
|
|
||||||
m_formatter = new StreamFormatterBase;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
IOStreamBase::~IOStreamBase() {
|
|
||||||
delete m_formatter;
|
|
||||||
m_formatter = ddl_nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IOStreamBase::open( const std::string &name ) {
|
|
||||||
m_file = ::fopen( name.c_str(), "a" );
|
|
||||||
if (m_file == ddl_nullptr) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IOStreamBase::close() {
|
|
||||||
if (ddl_nullptr == m_file) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
::fclose( m_file );
|
|
||||||
m_file = ddl_nullptr;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t IOStreamBase::write( const std::string &statement ) {
|
|
||||||
if (ddl_nullptr == m_file) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
std::string formatStatement = m_formatter->format( statement );
|
|
||||||
return ::fwrite( formatStatement.c_str(), sizeof( char ), formatStatement.size(), m_file );
|
|
||||||
}
|
|
||||||
|
|
||||||
struct DDLNodeIterator {
|
struct DDLNodeIterator {
|
||||||
const DDLNode::DllNodeList &m_childs;
|
const DDLNode::DllNodeList &m_childs;
|
||||||
size_t m_idx;
|
size_t m_idx;
|
||||||
|
|
|
@ -327,14 +327,14 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) {
|
||||||
|
|
||||||
bool error( false );
|
bool error( false );
|
||||||
in = lookForNextToken( in, end );
|
in = lookForNextToken( in, end );
|
||||||
if( *in == '{' ) {
|
if( *in == *Grammar::OpenBracketToken) {
|
||||||
// loop over all children ( data and nodes )
|
// loop over all children ( data and nodes )
|
||||||
do {
|
do {
|
||||||
in = parseStructureBody( in, end, error );
|
in = parseStructureBody( in, end, error );
|
||||||
if(in == ddl_nullptr){
|
if(in == ddl_nullptr){
|
||||||
return ddl_nullptr;
|
return ddl_nullptr;
|
||||||
}
|
}
|
||||||
} while ( *in != '}' );
|
} while ( *in != *Grammar::CloseBracketToken);
|
||||||
++in;
|
++in;
|
||||||
} else {
|
} else {
|
||||||
++in;
|
++in;
|
||||||
|
@ -540,7 +540,11 @@ char *OpenDDLParser::parseIdentifier( char *in, char *end, Text **id ) {
|
||||||
// get size of id
|
// get size of id
|
||||||
size_t idLen( 0 );
|
size_t idLen( 0 );
|
||||||
char *start( in );
|
char *start( in );
|
||||||
while( !isSeparator( *in ) && !isNewLine( *in ) && ( in != end ) && *in != Grammar::OpenPropertyToken[ 0 ] && *in != Grammar::ClosePropertyToken[ 0 ] && *in != '$' ) {
|
while( !isSeparator( *in ) &&
|
||||||
|
!isNewLine( *in ) && ( in != end ) &&
|
||||||
|
*in != Grammar::OpenPropertyToken[ 0 ] &&
|
||||||
|
*in != Grammar::ClosePropertyToken[ 0 ] &&
|
||||||
|
*in != '$' ) {
|
||||||
++in;
|
++in;
|
||||||
++idLen;
|
++idLen;
|
||||||
}
|
}
|
||||||
|
@ -562,7 +566,7 @@ char *OpenDDLParser::parsePrimitiveDataType( char *in, char *end, Value::ValueTy
|
||||||
for( unsigned int i = 0; i < Value::ddl_types_max; i++ ) {
|
for( unsigned int i = 0; i < Value::ddl_types_max; i++ ) {
|
||||||
prim_len = strlen( Grammar::PrimitiveTypeToken[ i ] );
|
prim_len = strlen( Grammar::PrimitiveTypeToken[ i ] );
|
||||||
if( 0 == strncmp( in, Grammar::PrimitiveTypeToken[ i ], prim_len ) ) {
|
if( 0 == strncmp( in, Grammar::PrimitiveTypeToken[ i ], prim_len ) ) {
|
||||||
type = ( Value::ValueType ) i;
|
type = static_cast<Value::ValueType>( i );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,96 @@
|
||||||
|
/*-----------------------------------------------------------------------------------------------
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2014-2015 Kim Kulling
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
-----------------------------------------------------------------------------------------------*/
|
||||||
|
#include <openddlparser/OpenDDLStream.h>
|
||||||
|
|
||||||
|
BEGIN_ODDLPARSER_NS
|
||||||
|
|
||||||
|
StreamFormatterBase::StreamFormatterBase() {
|
||||||
|
// empty
|
||||||
|
}
|
||||||
|
|
||||||
|
StreamFormatterBase::~StreamFormatterBase() {
|
||||||
|
// empty
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string StreamFormatterBase::format(const std::string &statement) {
|
||||||
|
std::string tmp(statement);
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
IOStreamBase::IOStreamBase(StreamFormatterBase *formatter)
|
||||||
|
: m_formatter(formatter)
|
||||||
|
, m_file(ddl_nullptr) {
|
||||||
|
if (ddl_nullptr == m_formatter) {
|
||||||
|
m_formatter = new StreamFormatterBase;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
IOStreamBase::~IOStreamBase() {
|
||||||
|
delete m_formatter;
|
||||||
|
m_formatter = ddl_nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IOStreamBase::open(const std::string &name) {
|
||||||
|
m_file = ::fopen(name.c_str(), "a");
|
||||||
|
if (m_file == ddl_nullptr) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IOStreamBase::close() {
|
||||||
|
if (ddl_nullptr == m_file) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
::fclose(m_file);
|
||||||
|
m_file = ddl_nullptr;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IOStreamBase::isOpen() const {
|
||||||
|
return ( ddl_nullptr != m_file );
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t IOStreamBase::read( size_t sizeToRead, std::string &statement ) {
|
||||||
|
if (ddl_nullptr == m_file) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
statement.resize(sizeToRead);
|
||||||
|
const size_t readBytes = ::fread( &statement[0], 1, sizeToRead, m_file );
|
||||||
|
|
||||||
|
return readBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t IOStreamBase::write(const std::string &statement) {
|
||||||
|
if (ddl_nullptr == m_file) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
std::string formatStatement = m_formatter->format(statement);
|
||||||
|
return ::fwrite(formatStatement.c_str(), sizeof(char), formatStatement.size(), m_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
END_ODDLPARSER_NS
|
|
@ -294,7 +294,7 @@ Reference *Value::getRef() const {
|
||||||
return (Reference*) m_data;
|
return (Reference*) m_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Value::dump() {
|
void Value::dump( IOStreamBase &stream ) {
|
||||||
switch( m_type ) {
|
switch( m_type ) {
|
||||||
case ddl_none:
|
case ddl_none:
|
||||||
std::cout << "None" << std::endl;
|
std::cout << "None" << std::endl;
|
||||||
|
@ -354,7 +354,7 @@ Value *Value::getNext() const {
|
||||||
return m_next;
|
return m_next;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t Value::size(){
|
size_t Value::size() const{
|
||||||
size_t result=1;
|
size_t result=1;
|
||||||
Value *n=m_next;
|
Value *n=m_next;
|
||||||
while( n!=ddl_nullptr) {
|
while( n!=ddl_nullptr) {
|
||||||
|
|
|
@ -29,6 +29,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
BEGIN_ODDLPARSER_NS
|
BEGIN_ODDLPARSER_NS
|
||||||
|
|
||||||
|
// Forward declarations
|
||||||
|
class IOStreamBase;
|
||||||
class Value;
|
class Value;
|
||||||
class OpenDDLParser;
|
class OpenDDLParser;
|
||||||
|
|
||||||
|
@ -84,7 +86,7 @@ public:
|
||||||
const std::string &getType() const;
|
const std::string &getType() const;
|
||||||
|
|
||||||
/// Set the name of the DDLNode instance.
|
/// Set the name of the DDLNode instance.
|
||||||
/// @param type [in] The name.
|
/// @param name [in] The name.
|
||||||
void setName( const std::string &name );
|
void setName( const std::string &name );
|
||||||
|
|
||||||
/// @brief Returns the name of the DDLNode instance.
|
/// @brief Returns the name of the DDLNode instance.
|
||||||
|
@ -122,7 +124,7 @@ public:
|
||||||
Value *getValue() const;
|
Value *getValue() const;
|
||||||
|
|
||||||
/// @brief Set a new DataArrayList.
|
/// @brief Set a new DataArrayList.
|
||||||
/// @param val [in] The DataArrayList instance.
|
/// @param dtArrayList [in] The DataArrayList instance.
|
||||||
void setDataArrayList( DataArrayList *dtArrayList );
|
void setDataArrayList( DataArrayList *dtArrayList );
|
||||||
|
|
||||||
/// @brief Returns the DataArrayList.
|
/// @brief Returns the DataArrayList.
|
||||||
|
@ -130,13 +132,17 @@ public:
|
||||||
DataArrayList *getDataArrayList() const;
|
DataArrayList *getDataArrayList() const;
|
||||||
|
|
||||||
/// @brief Set a new Reference set.
|
/// @brief Set a new Reference set.
|
||||||
/// @param val [in] The first value instance of the Reference set.
|
/// @param refs [in] The first value instance of the Reference set.
|
||||||
void setReferences( Reference *refs );
|
void setReferences( Reference *refs );
|
||||||
|
|
||||||
/// @brief Returns the first element of the assigned Reference set.
|
/// @brief Returns the first element of the assigned Reference set.
|
||||||
/// @return The first property of the assigned Reference set.
|
/// @return The first property of the assigned Reference set.
|
||||||
Reference *getReferences() const;
|
Reference *getReferences() const;
|
||||||
|
|
||||||
|
/// @brief Will dump the node into the stream.
|
||||||
|
/// @param stream [in] The stream to write to.
|
||||||
|
void dump(IOStreamBase &stream);
|
||||||
|
|
||||||
/// @brief The creation method.
|
/// @brief The creation method.
|
||||||
/// @param type [in] The DDLNode type.
|
/// @param type [in] The DDLNode type.
|
||||||
/// @param name [in] The name for the new DDLNode instance.
|
/// @param name [in] The name for the new DDLNode instance.
|
||||||
|
|
|
@ -23,37 +23,13 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <openddlparser/OpenDDLCommon.h>
|
#include <openddlparser/OpenDDLCommon.h>
|
||||||
|
#include <openddlparser/OpenDDLStream.h>
|
||||||
#include <openddlparser/Value.h>
|
#include <openddlparser/Value.h>
|
||||||
|
|
||||||
BEGIN_ODDLPARSER_NS
|
BEGIN_ODDLPARSER_NS
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------------------------
|
// Forward declarations
|
||||||
/// @ingroup IOStreamBase
|
class IOStreamBase;
|
||||||
/// @brief This class represents the stream to write out.
|
|
||||||
//-------------------------------------------------------------------------------------------------
|
|
||||||
class DLL_ODDLPARSER_EXPORT StreamFormatterBase {
|
|
||||||
public:
|
|
||||||
StreamFormatterBase();
|
|
||||||
virtual ~StreamFormatterBase();
|
|
||||||
virtual std::string format( const std::string &statement );
|
|
||||||
};
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------------------------
|
|
||||||
/// @ingroup IOStreamBase
|
|
||||||
/// @brief This class represents the stream to write out.
|
|
||||||
//-------------------------------------------------------------------------------------------------
|
|
||||||
class DLL_ODDLPARSER_EXPORT IOStreamBase {
|
|
||||||
public:
|
|
||||||
IOStreamBase( StreamFormatterBase *formatter = ddl_nullptr );
|
|
||||||
virtual ~IOStreamBase();
|
|
||||||
virtual bool open( const std::string &anme );
|
|
||||||
virtual bool close();
|
|
||||||
virtual size_t write( const std::string &statement );
|
|
||||||
|
|
||||||
private:
|
|
||||||
StreamFormatterBase *m_formatter;
|
|
||||||
FILE *m_file;
|
|
||||||
};
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
|
|
|
@ -39,6 +39,16 @@ struct Identifier;
|
||||||
struct Reference;
|
struct Reference;
|
||||||
struct Property;
|
struct Property;
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline
|
||||||
|
bool isEmbeddedCommentOpenTag( T *in, T *end ) {
|
||||||
|
if ( in == '/' && in+1 == '*' ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/// @brief Utility function to search for the next token or the end of the buffer.
|
/// @brief Utility function to search for the next token or the end of the buffer.
|
||||||
/// @param in [in] The start position in the buffer.
|
/// @param in [in] The start position in the buffer.
|
||||||
/// @param end [in] The end position in the buffer.
|
/// @param end [in] The end position in the buffer.
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
/*-----------------------------------------------------------------------------------------------
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2014-2015 Kim Kulling
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
-----------------------------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <openddlparser/OpenDDLCommon.h>
|
||||||
|
|
||||||
|
BEGIN_ODDLPARSER_NS
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
/// @ingroup IOStreamBase
|
||||||
|
/// @brief This class represents the stream to write out.
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
class DLL_ODDLPARSER_EXPORT StreamFormatterBase {
|
||||||
|
public:
|
||||||
|
/// @brief The class constructor.
|
||||||
|
StreamFormatterBase();
|
||||||
|
|
||||||
|
/// @brief The class destructor, virtual.
|
||||||
|
virtual ~StreamFormatterBase();
|
||||||
|
|
||||||
|
/// @brief Will format the sring and return the new formatted result.
|
||||||
|
/// @param statement [in] The string to reformat.
|
||||||
|
/// @return The reformatted result.
|
||||||
|
virtual std::string format(const std::string &statement);
|
||||||
|
};
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
/// @ingroup IOStreamBase
|
||||||
|
/// @brief This class represents the stream to write out.
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
class DLL_ODDLPARSER_EXPORT IOStreamBase {
|
||||||
|
public:
|
||||||
|
/// @brief The class constructor with the formatter.
|
||||||
|
/// @param formatter [in] The formatter to use.
|
||||||
|
explicit IOStreamBase(StreamFormatterBase *formatter = ddl_nullptr);
|
||||||
|
|
||||||
|
/// @brief The class destructor, virtual.
|
||||||
|
virtual ~IOStreamBase();
|
||||||
|
|
||||||
|
/// @brief Will open the stream.
|
||||||
|
/// @param name [in] The name for the stream.
|
||||||
|
/// @return true, if the stream was opened successfully, false if not.
|
||||||
|
virtual bool open(const std::string &name);
|
||||||
|
|
||||||
|
/// @brief Will close the stream.
|
||||||
|
/// @return true, if the stream was closed successfully, false if not.
|
||||||
|
virtual bool close();
|
||||||
|
|
||||||
|
/// @brief Returns true, if the stream is open.
|
||||||
|
/// @return true, if the stream is open, false if not.
|
||||||
|
virtual bool isOpen() const;
|
||||||
|
|
||||||
|
/// @brief Will read a string from the stream.
|
||||||
|
/// @param sizeToRead [in] The size to read in bytes.
|
||||||
|
/// @param statement [out] The read statements.
|
||||||
|
/// @return The bytes read from the stream.
|
||||||
|
virtual size_t read( size_t sizeToRead, std::string &statement );
|
||||||
|
|
||||||
|
/// @brief Will write a string into the stream.
|
||||||
|
/// @param statement [in] The string to write.
|
||||||
|
/// @return The bytes written into the stream.
|
||||||
|
virtual size_t write(const std::string &statement);
|
||||||
|
|
||||||
|
private:
|
||||||
|
StreamFormatterBase *m_formatter;
|
||||||
|
FILE *m_file;
|
||||||
|
};
|
||||||
|
|
||||||
|
END_ODDLPARSER_NS
|
|
@ -28,8 +28,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
BEGIN_ODDLPARSER_NS
|
BEGIN_ODDLPARSER_NS
|
||||||
|
|
||||||
|
// Forward declarations
|
||||||
struct ValueAllocator;
|
struct ValueAllocator;
|
||||||
|
|
||||||
|
class IOStreamBase;
|
||||||
|
|
||||||
///------------------------------------------------------------------------------------------------
|
///------------------------------------------------------------------------------------------------
|
||||||
/// @brief This class implements a value.
|
/// @brief This class implements a value.
|
||||||
///
|
///
|
||||||
|
@ -213,7 +216,7 @@ public:
|
||||||
double getDouble() const;
|
double getDouble() const;
|
||||||
|
|
||||||
/// @brief Assigns a std::string to the value.
|
/// @brief Assigns a std::string to the value.
|
||||||
/// @param value [in] The value.
|
/// @param str [in] The value.
|
||||||
void setString( const std::string &str );
|
void setString( const std::string &str );
|
||||||
|
|
||||||
/// @brief Returns the std::string value.
|
/// @brief Returns the std::string value.
|
||||||
|
@ -229,7 +232,8 @@ public:
|
||||||
Reference *getRef() const;
|
Reference *getRef() const;
|
||||||
|
|
||||||
/// @brief Dumps the value.
|
/// @brief Dumps the value.
|
||||||
void dump();
|
/// @param stream [in] The stream to write in.
|
||||||
|
void dump( IOStreamBase &stream );
|
||||||
|
|
||||||
/// @brief Assigns the next value.
|
/// @brief Assigns the next value.
|
||||||
/// @param next [n] The next value.
|
/// @param next [n] The next value.
|
||||||
|
@ -241,7 +245,7 @@ public:
|
||||||
|
|
||||||
/// @brief Gets the length of the array.
|
/// @brief Gets the length of the array.
|
||||||
/// @return The number of items in the array.
|
/// @return The number of items in the array.
|
||||||
size_t size();
|
size_t size() const;
|
||||||
|
|
||||||
ValueType m_type;
|
ValueType m_type;
|
||||||
size_t m_size;
|
size_t m_size;
|
||||||
|
|
Loading…
Reference in New Issue