OpenDDLParser: latest greatest.
parent
56a9d5c659
commit
afb2f3036e
|
@ -732,10 +732,12 @@ SET ( openddl_parser_SRCS
|
|||
../contrib/openddlparser/code/OpenDDLCommon.cpp
|
||||
../contrib/openddlparser/code/OpenDDLExport.cpp
|
||||
../contrib/openddlparser/code/Value.cpp
|
||||
../contrib/openddlparser/code/OpenDDLStream.cpp
|
||||
../contrib/openddlparser/include/openddlparser/OpenDDLParser.h
|
||||
../contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h
|
||||
../contrib/openddlparser/include/openddlparser/OpenDDLCommon.h
|
||||
../contrib/openddlparser/include/openddlparser/OpenDDLExport.h
|
||||
../contrib/openddlparser/include/openddlparser/OpenDDLStream.h
|
||||
../contrib/openddlparser/include/openddlparser/DDLNode.h
|
||||
../contrib/openddlparser/include/openddlparser/Value.h
|
||||
)
|
||||
|
|
|
@ -3,18 +3,40 @@ PROJECT( OpenDDL-Parser )
|
|||
SET ( OPENDDL_PARSER_VERSION_MAJOR 0 )
|
||||
SET ( OPENDDL_PARSER_VERSION_MINOR 1 )
|
||||
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}" )
|
||||
|
||||
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 )
|
||||
find_package(Threads)
|
||||
else()
|
||||
add_definitions( -D_CRT_SECURE_NO_WARNINGS )
|
||||
endif()
|
||||
|
||||
if ( DDL_STATIC_LIBRARY )
|
||||
add_definitions( -DOPENDDL_STATIC_LIBARY )
|
||||
endif()
|
||||
|
||||
add_definitions( -DOPENDDLPARSER_BUILD )
|
||||
add_definitions( -DOPENDDL_NO_USE_CPP11 )
|
||||
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(
|
||||
./
|
||||
|
@ -24,9 +46,10 @@ INCLUDE_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_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib )
|
||||
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/bin )
|
||||
|
@ -40,18 +63,38 @@ if( WIN32 AND NOT CYGWIN )
|
|||
endif()
|
||||
elseif( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX )
|
||||
# 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" )
|
||||
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()
|
||||
|
||||
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
|
||||
code/OpenDDLCommon.cpp
|
||||
code/OpenDDLExport.cpp
|
||||
code/OpenDDLParser.cpp
|
||||
code/OpenDDLStream.cpp
|
||||
code/DDLNode.cpp
|
||||
code/Value.cpp
|
||||
include/openddlparser/OpenDDLCommon.h
|
||||
include/openddlparser/OpenDDLExport.h
|
||||
include/openddlparser/OpenDDLParser.h
|
||||
include/openddlparser/OpenDDLParserUtils.h
|
||||
include/openddlparser/OpenDDLCommon.h
|
||||
include/openddlparser/OpenDDLStream.h
|
||||
include/openddlparser/DDLNode.h
|
||||
include/openddlparser/Value.h
|
||||
README.md
|
||||
|
@ -59,6 +102,69 @@ SET ( openddl_parser_src
|
|||
|
||||
SOURCE_GROUP( code FILES ${openddl_parser_src} )
|
||||
|
||||
if ( DDL_STATIC_LIBRARY )
|
||||
ADD_LIBRARY( openddl_parser STATIC
|
||||
${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 ):
|
||||
Static build option, Interface improvements
|
||||
|
||||
- (wise86-android)
|
||||
fix several mem-leaks
|
||||
|
||||
- Paul Holland ( pkholland ):
|
||||
Bugfixes.
|
||||
|
|
|
@ -11,7 +11,7 @@ Current coverity check status:
|
|||
<img alt="Coverity Scan Build Status"
|
||||
src="https://scan.coverity.com/projects/5606/badge.svg"/>
|
||||
</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
|
||||
===================
|
||||
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
|
||||
|
||||
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:
|
||||
|
||||
> make
|
||||
|
|
|
@ -191,6 +191,10 @@ Reference *DDLNode::getReferences() const {
|
|||
return m_references;
|
||||
}
|
||||
|
||||
void DDLNode::dump(IOStreamBase &stream) {
|
||||
// Todo!
|
||||
}
|
||||
|
||||
DDLNode *DDLNode::create( const std::string &type, const std::string &name, DDLNode *parent ) {
|
||||
const size_t idx( s_allocatedNodes.size() );
|
||||
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
|
||||
|
||||
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 {
|
||||
const DDLNode::DllNodeList &m_childs;
|
||||
size_t m_idx;
|
||||
|
|
|
@ -327,14 +327,14 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) {
|
|||
|
||||
bool error( false );
|
||||
in = lookForNextToken( in, end );
|
||||
if( *in == '{' ) {
|
||||
if( *in == *Grammar::OpenBracketToken) {
|
||||
// loop over all children ( data and nodes )
|
||||
do {
|
||||
in = parseStructureBody( in, end, error );
|
||||
if(in == ddl_nullptr){
|
||||
return ddl_nullptr;
|
||||
}
|
||||
} while ( *in != '}' );
|
||||
} while ( *in != *Grammar::CloseBracketToken);
|
||||
++in;
|
||||
} else {
|
||||
++in;
|
||||
|
@ -540,7 +540,11 @@ char *OpenDDLParser::parseIdentifier( char *in, char *end, Text **id ) {
|
|||
// get size of id
|
||||
size_t idLen( 0 );
|
||||
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;
|
||||
++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++ ) {
|
||||
prim_len = strlen( Grammar::PrimitiveTypeToken[ i ] );
|
||||
if( 0 == strncmp( in, Grammar::PrimitiveTypeToken[ i ], prim_len ) ) {
|
||||
type = ( Value::ValueType ) i;
|
||||
type = static_cast<Value::ValueType>( i );
|
||||
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;
|
||||
}
|
||||
|
||||
void Value::dump() {
|
||||
void Value::dump( IOStreamBase &stream ) {
|
||||
switch( m_type ) {
|
||||
case ddl_none:
|
||||
std::cout << "None" << std::endl;
|
||||
|
@ -354,7 +354,7 @@ Value *Value::getNext() const {
|
|||
return m_next;
|
||||
}
|
||||
|
||||
size_t Value::size(){
|
||||
size_t Value::size() const{
|
||||
size_t result=1;
|
||||
Value *n=m_next;
|
||||
while( n!=ddl_nullptr) {
|
||||
|
|
|
@ -29,6 +29,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
||||
BEGIN_ODDLPARSER_NS
|
||||
|
||||
// Forward declarations
|
||||
class IOStreamBase;
|
||||
class Value;
|
||||
class OpenDDLParser;
|
||||
|
||||
|
@ -84,7 +86,7 @@ public:
|
|||
const std::string &getType() const;
|
||||
|
||||
/// Set the name of the DDLNode instance.
|
||||
/// @param type [in] The name.
|
||||
/// @param name [in] The name.
|
||||
void setName( const std::string &name );
|
||||
|
||||
/// @brief Returns the name of the DDLNode instance.
|
||||
|
@ -122,7 +124,7 @@ public:
|
|||
Value *getValue() const;
|
||||
|
||||
/// @brief Set a new DataArrayList.
|
||||
/// @param val [in] The DataArrayList instance.
|
||||
/// @param dtArrayList [in] The DataArrayList instance.
|
||||
void setDataArrayList( DataArrayList *dtArrayList );
|
||||
|
||||
/// @brief Returns the DataArrayList.
|
||||
|
@ -130,13 +132,17 @@ public:
|
|||
DataArrayList *getDataArrayList() const;
|
||||
|
||||
/// @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 );
|
||||
|
||||
/// @brief Returns the first element of the assigned Reference set.
|
||||
/// @return The first property of the assigned Reference set.
|
||||
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.
|
||||
/// @param type [in] The DDLNode type.
|
||||
/// @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
|
||||
|
||||
#include <openddlparser/OpenDDLCommon.h>
|
||||
#include <openddlparser/OpenDDLStream.h>
|
||||
#include <openddlparser/Value.h>
|
||||
|
||||
BEGIN_ODDLPARSER_NS
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
/// @ingroup 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;
|
||||
};
|
||||
// Forward declarations
|
||||
class IOStreamBase;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
///
|
||||
|
|
|
@ -39,6 +39,16 @@ struct Identifier;
|
|||
struct Reference;
|
||||
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.
|
||||
/// @param in [in] The start 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
|
||||
|
||||
// Forward declarations
|
||||
struct ValueAllocator;
|
||||
|
||||
class IOStreamBase;
|
||||
|
||||
///------------------------------------------------------------------------------------------------
|
||||
/// @brief This class implements a value.
|
||||
///
|
||||
|
@ -213,7 +216,7 @@ public:
|
|||
double getDouble() const;
|
||||
|
||||
/// @brief Assigns a std::string to the value.
|
||||
/// @param value [in] The value.
|
||||
/// @param str [in] The value.
|
||||
void setString( const std::string &str );
|
||||
|
||||
/// @brief Returns the std::string value.
|
||||
|
@ -229,7 +232,8 @@ public:
|
|||
Reference *getRef() const;
|
||||
|
||||
/// @brief Dumps the value.
|
||||
void dump();
|
||||
/// @param stream [in] The stream to write in.
|
||||
void dump( IOStreamBase &stream );
|
||||
|
||||
/// @brief Assigns the next value.
|
||||
/// @param next [n] The next value.
|
||||
|
@ -241,7 +245,7 @@ public:
|
|||
|
||||
/// @brief Gets the length of the array.
|
||||
/// @return The number of items in the array.
|
||||
size_t size();
|
||||
size_t size() const;
|
||||
|
||||
ValueType m_type;
|
||||
size_t m_size;
|
||||
|
|
Loading…
Reference in New Issue