replace opengexparser by using openddl-parser.
Signed-off-by: Kim Kulling <kim.kulling@googlemail.com>pull/502/head
parent
e9dcad4181
commit
20b3ce6a40
|
@ -155,6 +155,9 @@ endif(NOT ZLIB_FOUND)
|
||||||
INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
|
INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
|
||||||
|
|
||||||
add_subdirectory( contrib/openddlparser )
|
add_subdirectory( contrib/openddlparser )
|
||||||
|
INCLUDE_DIRECTORIES( contrib/openddlparser/include )
|
||||||
|
SET( OPENDDL_PARSER_LIBRARIES openddl_parser )
|
||||||
|
|
||||||
# Search for unzip
|
# Search for unzip
|
||||||
if (PKG_CONFIG_FOUND)
|
if (PKG_CONFIG_FOUND)
|
||||||
PKG_CHECK_MODULES(UNZIP minizip)
|
PKG_CHECK_MODULES(UNZIP minizip)
|
||||||
|
|
|
@ -353,8 +353,6 @@ SOURCE_GROUP( Ogre FILES ${Ogre_SRCS})
|
||||||
SET( OpenGEX_SRCS
|
SET( OpenGEX_SRCS
|
||||||
OpenGEXImporter.cpp
|
OpenGEXImporter.cpp
|
||||||
OpenGEXImporter.h
|
OpenGEXImporter.h
|
||||||
OpenGEXParser.cpp
|
|
||||||
OpenGEXParser.h
|
|
||||||
OpenGEXStructs.h
|
OpenGEXStructs.h
|
||||||
)
|
)
|
||||||
SOURCE_GROUP( OpenGEX FILES ${OpenGEX_SRCS})
|
SOURCE_GROUP( OpenGEX FILES ${OpenGEX_SRCS})
|
||||||
|
@ -729,7 +727,7 @@ SET( assimp_src
|
||||||
|
|
||||||
ADD_LIBRARY( assimp ${assimp_src} )
|
ADD_LIBRARY( assimp ${assimp_src} )
|
||||||
|
|
||||||
TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES})
|
TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES} ${OPENDDL_PARSER_LIBRARIES} )
|
||||||
|
|
||||||
if(ANDROID AND ASSIMP_ANDROID_JNIIOSYSTEM)
|
if(ANDROID AND ASSIMP_ANDROID_JNIIOSYSTEM)
|
||||||
set(ASSIMP_ANDROID_JNIIOSYSTEM_PATH port/AndroidJNI)
|
set(ASSIMP_ANDROID_JNIIOSYSTEM_PATH port/AndroidJNI)
|
||||||
|
|
|
@ -41,9 +41,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include "AssimpPCH.h"
|
#include "AssimpPCH.h"
|
||||||
#include "OpenGEXImporter.h"
|
#include "OpenGEXImporter.h"
|
||||||
#include "OpenGEXParser.h"
|
|
||||||
#include "DefaultIOSystem.h"
|
#include "DefaultIOSystem.h"
|
||||||
|
|
||||||
|
#include <openddlparser/OpenDDLParser.h>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
static const aiImporterDesc desc = {
|
static const aiImporterDesc desc = {
|
||||||
|
@ -62,6 +63,8 @@ static const aiImporterDesc desc = {
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
namespace OpenGEX {
|
namespace OpenGEX {
|
||||||
|
|
||||||
|
USE_ODDLPARSER_NS
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
OpenGEXImporter::OpenGEXImporter() {
|
OpenGEXImporter::OpenGEXImporter() {
|
||||||
|
|
||||||
|
@ -95,8 +98,14 @@ void OpenGEXImporter::InternReadFile( const std::string &filename, aiScene *pSce
|
||||||
|
|
||||||
std::vector<char> buffer;
|
std::vector<char> buffer;
|
||||||
TextFileToBuffer( file, buffer );
|
TextFileToBuffer( file, buffer );
|
||||||
OpenGEXParser myParser( buffer );
|
|
||||||
myParser.parse();
|
OpenDDLParser myParser;
|
||||||
|
myParser.setBuffer( &buffer[ 0 ], buffer.size() );
|
||||||
|
bool success( myParser.parse() );
|
||||||
|
if( success ) {
|
||||||
|
Context *ctx = myParser.getContext();
|
||||||
|
importMetric( ctx );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
|
@ -109,6 +118,28 @@ void OpenGEXImporter::SetupProperties( const Importer *pImp ) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------
|
||||||
|
void OpenGEXImporter::importMetric( Context *ctx ) {
|
||||||
|
if( NULL == ctx || NULL == ctx->getProperties() ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Property *prop = ctx->getProperties();
|
||||||
|
while( NULL != prop ) {
|
||||||
|
prop = prop->m_next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------
|
||||||
|
void OpenGEXImporter::ParseGeoObject() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------
|
||||||
|
void OpenGEXImporter::ParseMaterial() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
} // Namespace OpenGEX
|
} // Namespace OpenGEX
|
||||||
|
|
|
@ -44,6 +44,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include "BaseImporter.h"
|
#include "BaseImporter.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ODDLParser {
|
||||||
|
struct Context;
|
||||||
|
}
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
namespace OpenGEX {
|
namespace OpenGEX {
|
||||||
|
|
||||||
|
@ -72,7 +77,7 @@ public:
|
||||||
virtual void SetupProperties( const Importer *pImp );
|
virtual void SetupProperties( const Importer *pImp );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void ParseMetric();
|
void importMetric( ODDLParser::Context *ctx );
|
||||||
void ParseGeoObject();
|
void ParseGeoObject();
|
||||||
void ParseMaterial();
|
void ParseMaterial();
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,409 +0,0 @@
|
||||||
/*
|
|
||||||
Open Asset Import Library (assimp)
|
|
||||||
----------------------------------------------------------------------
|
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
|
||||||
with or without modification, are permitted provided that the
|
|
||||||
following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
|
||||||
copyright notice, this list of conditions and the
|
|
||||||
following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above
|
|
||||||
copyright notice, this list of conditions and the
|
|
||||||
following disclaimer in the documentation and/or other
|
|
||||||
materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the assimp team, nor the names of its
|
|
||||||
contributors may be used to endorse or promote products
|
|
||||||
derived from this software without specific prior
|
|
||||||
written permission of the assimp team.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
#include "AssimpPCH.h"
|
|
||||||
#ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER
|
|
||||||
|
|
||||||
#include "OpenGEXParser.h"
|
|
||||||
#include "OpenGEXStructs.h"
|
|
||||||
#include "ParsingUtils.h"
|
|
||||||
#include "fast_atof.h"
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace Assimp {
|
|
||||||
namespace OpenGEX {
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
static const std::string Metric = "Metric";
|
|
||||||
static const std::string GeometryNode = "GeometryNode";
|
|
||||||
static const std::string GeometryObject = "GeometryObject";
|
|
||||||
static const std::string Material = "Material";
|
|
||||||
static const size_t NumObjects = 4;
|
|
||||||
static const std::string RootNodes[ NumObjects ] = {
|
|
||||||
Metric,
|
|
||||||
GeometryNode,
|
|
||||||
GeometryObject,
|
|
||||||
Material
|
|
||||||
};
|
|
||||||
|
|
||||||
static const size_t NumSeparator = 4;
|
|
||||||
static const std::string Separator[ NumSeparator ] = {
|
|
||||||
"(", ")", "{", "}"
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static const size_t NumToken = 8;
|
|
||||||
static const std::string Token[ NumToken ] = {
|
|
||||||
RootNodes[ 0 ],
|
|
||||||
RootNodes[ 1 ],
|
|
||||||
RootNodes[ 2 ],
|
|
||||||
RootNodes[ 3 ],
|
|
||||||
Separator[ 0 ],
|
|
||||||
Separator[ 1 ],
|
|
||||||
Separator[ 2 ],
|
|
||||||
Separator[ 3 ]
|
|
||||||
};
|
|
||||||
|
|
||||||
static bool isSeparator( char in ) {
|
|
||||||
return ( in == '(' || in == ')' || in == '{' || in == '}' );
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool containsNode( const char *bufferPtr, size_t size, const std::string *nodes,
|
|
||||||
size_t numNodes, std::string &tokenFound ) {
|
|
||||||
tokenFound = "";
|
|
||||||
if( 0 == numNodes ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool found( false );
|
|
||||||
for( size_t i = 0; i < numNodes; ++i ) {
|
|
||||||
if( TokenMatch( bufferPtr, nodes[ i ].c_str(), nodes[ i ].size() ) ) {
|
|
||||||
tokenFound = nodes[ i ];
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return found;
|
|
||||||
}
|
|
||||||
|
|
||||||
static OpenGEXParser::TokenType getTokenTypeByName( const char *in ) {
|
|
||||||
ai_assert( NULL != in );
|
|
||||||
|
|
||||||
OpenGEXParser::TokenType type( OpenGEXParser::None );
|
|
||||||
for( size_t i = 0; i < NumToken; ++i ) {
|
|
||||||
if( TokenMatch( in, Token[ i ].c_str(), Token[ i ].size() ) ) {
|
|
||||||
type = static_cast<OpenGEXParser::TokenType>( i+1 );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void removeQuotes( std::string &attribName ) {
|
|
||||||
std::string tmp;
|
|
||||||
for( unsigned int i = 0; i < attribName.size(); ++i ) {
|
|
||||||
if( attribName[ i ] != '\"' ) {
|
|
||||||
tmp += attribName[ i ];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
attribName = tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
OpenGEXParser::OpenGEXParser( const std::vector<char> &buffer )
|
|
||||||
: m_buffer( buffer )
|
|
||||||
, m_index( 0 )
|
|
||||||
, m_buffersize( buffer.size() )
|
|
||||||
, m_nodeTypeStack() {
|
|
||||||
// empty
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
OpenGEXParser::~OpenGEXParser() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
void OpenGEXParser::parse() {
|
|
||||||
while( parseNextNode() ) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
std::string OpenGEXParser::getNextToken() {
|
|
||||||
std::string token;
|
|
||||||
while( m_index < m_buffersize && IsSpace( m_buffer[ m_index ] ) ) {
|
|
||||||
m_index++;
|
|
||||||
}
|
|
||||||
|
|
||||||
while( m_index < m_buffersize && !IsSpace( m_buffer[ m_index ] ) && !isSeparator( m_buffer[ m_index ] ) ) {
|
|
||||||
token += m_buffer[ m_index ];
|
|
||||||
m_index++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( token == "//" ) {
|
|
||||||
skipComments();
|
|
||||||
token = getNextToken();
|
|
||||||
}
|
|
||||||
|
|
||||||
if( token.empty() ) {
|
|
||||||
if( isSeparator( m_buffer[ m_index ] ) ) {
|
|
||||||
token += m_buffer[ m_index ];
|
|
||||||
m_index++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return token;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
bool OpenGEXParser::skipComments() {
|
|
||||||
bool skipped( false );
|
|
||||||
if( strncmp( &m_buffer[ m_index ], "//", 2 ) == 0) {
|
|
||||||
while( !IsLineEnd( m_buffer[ m_index ] ) ) {
|
|
||||||
++m_index;
|
|
||||||
}
|
|
||||||
skipped = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return skipped;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
void OpenGEXParser::readUntilEndOfLine() {
|
|
||||||
while( !IsLineEnd( m_buffer[ m_index ] ) ) {
|
|
||||||
++m_index;
|
|
||||||
}
|
|
||||||
++m_index;
|
|
||||||
if( IsLineEnd( m_buffer[ m_index ] ) ) {
|
|
||||||
++m_index;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
bool OpenGEXParser::parseNextNode() {
|
|
||||||
std::string token( getNextToken() );
|
|
||||||
std::string rootNodeName, nodeType;
|
|
||||||
if( containsNode( token.c_str(), token.size(), RootNodes, NumObjects, rootNodeName ) ) {
|
|
||||||
m_nodeTypeStack.push_back( getTokenTypeByName( rootNodeName.c_str() ) );
|
|
||||||
if( !getNodeHeader( nodeType ) ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !getNodeData( nodeType ) ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
readUntilEndOfLine();
|
|
||||||
|
|
||||||
m_nodeTypeStack.pop_back();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
bool OpenGEXParser::getNodeHeader( std::string &name ) {
|
|
||||||
bool success( false );
|
|
||||||
TokenType tokenType( m_nodeTypeStack.back() );
|
|
||||||
if( tokenType == MetricNode ) {
|
|
||||||
if( getMetricAttributeKey( name ) ) {
|
|
||||||
success = true;
|
|
||||||
}
|
|
||||||
} else if( tokenType == GeometryNode ) {
|
|
||||||
|
|
||||||
} else if( tokenType == GeometryObject ) {
|
|
||||||
|
|
||||||
} else if( tokenType == Material ) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
DefaultLogger::get()->warn( "Unknown token type in file." );
|
|
||||||
}
|
|
||||||
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
bool OpenGEXParser::getBracketOpen() {
|
|
||||||
const std::string token( getNextToken() );
|
|
||||||
if( "{" == token ) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
bool OpenGEXParser::getBracketClose() {
|
|
||||||
const std::string token( getNextToken() );
|
|
||||||
if( "}" == token ) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
bool OpenGEXParser::getStringData( std::string &data ) {
|
|
||||||
if( !getBracketOpen() ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !getBracketClose() ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
bool OpenGEXParser::getFloatData( size_t num, float *data ) {
|
|
||||||
ai_assert( NULL != data );
|
|
||||||
|
|
||||||
std::string tk;
|
|
||||||
tk = getNextToken();
|
|
||||||
|
|
||||||
if( !getBracketOpen() ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ok( true );
|
|
||||||
size_t dataIdx( 0 );
|
|
||||||
for( unsigned int i = 0; i < num; ++i ) {
|
|
||||||
data[ dataIdx ] = fast_atof( &m_buffer[ m_index ] );
|
|
||||||
++dataIdx;
|
|
||||||
tk = getNextToken();
|
|
||||||
if( tk == "," ) {
|
|
||||||
if( i >= ( num - 1 ) ) {
|
|
||||||
ok = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !getBracketClose() ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
bool OpenGEXParser::getNodeData( const std::string &nodeType ) {
|
|
||||||
bool success( false );
|
|
||||||
|
|
||||||
if( !getBracketOpen() ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const TokenType type( m_nodeTypeStack.back() );
|
|
||||||
if( type == MetricNode ) {
|
|
||||||
success = onMetricNode( nodeType );
|
|
||||||
} else if( type == GeometryNode ) {
|
|
||||||
success = onGeometryNode();
|
|
||||||
} else if( type == GeometryObject ) {
|
|
||||||
success = onGeometryObject();
|
|
||||||
} else if( type == Material ) {
|
|
||||||
success = onMaterial();
|
|
||||||
} else {
|
|
||||||
DefaultLogger::get()->warn( "Unknown token type in file." );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !getBracketClose() ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
bool OpenGEXParser::getMetricAttributeKey( std::string &attribName ) {
|
|
||||||
bool ok( false );
|
|
||||||
attribName = "";
|
|
||||||
std::string token( getNextToken() );
|
|
||||||
if( token[ 0 ] == '(' ) {
|
|
||||||
// get attribute
|
|
||||||
token = getNextToken();
|
|
||||||
if( "key" == token ) {
|
|
||||||
std::string equal = getNextToken();
|
|
||||||
attribName = getNextToken();
|
|
||||||
token = getNextToken();
|
|
||||||
if( token[ 0 ] == ')' ) {
|
|
||||||
ok = true;
|
|
||||||
removeQuotes( attribName );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
bool OpenGEXParser::onMetricNode( const std::string &attribName ) {
|
|
||||||
float value( 0.0f );
|
|
||||||
bool success( true );
|
|
||||||
if( "distance" == attribName ) {
|
|
||||||
if( getFloatData( 1, &value ) ) {
|
|
||||||
m_model.m_metrics.m_distance = value;
|
|
||||||
}
|
|
||||||
} else if( "angle" == attribName ) {
|
|
||||||
if( getFloatData( 1, &value ) ) {
|
|
||||||
m_model.m_metrics.m_angle = value;
|
|
||||||
}
|
|
||||||
} else if( "time" == attribName ) {
|
|
||||||
if( getFloatData( 1, &value ) ) {
|
|
||||||
m_model.m_metrics.m_time = value;
|
|
||||||
}
|
|
||||||
} else if( "up" == attribName ) {
|
|
||||||
std::string up;
|
|
||||||
if( getStringData( up ) ) {
|
|
||||||
m_model.m_metrics.m_up = up;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
success = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
bool OpenGEXParser::onGeometryNode() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
bool OpenGEXParser::onGeometryObject() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
bool OpenGEXParser::onMaterial() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
} // Namespace OpenGEX
|
|
||||||
} // Namespace Assimp
|
|
||||||
|
|
||||||
#endif ASSIMP_BUILD_NO_OPEMGEX_IMPORTER
|
|
|
@ -1,121 +0,0 @@
|
||||||
/*
|
|
||||||
Open Asset Import Library (assimp)
|
|
||||||
----------------------------------------------------------------------
|
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
|
||||||
with or without modification, are permitted provided that the
|
|
||||||
following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
|
||||||
copyright notice, this list of conditions and the
|
|
||||||
following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above
|
|
||||||
copyright notice, this list of conditions and the
|
|
||||||
following disclaimer in the documentation and/or other
|
|
||||||
materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the assimp team, nor the names of its
|
|
||||||
contributors may be used to endorse or promote products
|
|
||||||
derived from this software without specific prior
|
|
||||||
written permission of the assimp team.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
#ifndef ASSIMP_OPENGEX_OPENGEXPARSER_H_INC
|
|
||||||
#define ASSIMP_OPENGEX_OPENGEXPARSER_H_INC
|
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
namespace Assimp {
|
|
||||||
namespace OpenGEX {
|
|
||||||
|
|
||||||
struct OpenGEXModel {
|
|
||||||
struct Metrics {
|
|
||||||
float m_distance;
|
|
||||||
float m_angle;
|
|
||||||
float m_time;
|
|
||||||
std::string m_up;
|
|
||||||
|
|
||||||
Metrics()
|
|
||||||
: m_distance( 0.0f )
|
|
||||||
, m_angle( 0.0f )
|
|
||||||
, m_time( 0.0f )
|
|
||||||
, m_up() {
|
|
||||||
// empty
|
|
||||||
}
|
|
||||||
} m_metrics;
|
|
||||||
};
|
|
||||||
|
|
||||||
class OpenGEXParser {
|
|
||||||
public:
|
|
||||||
enum TokenType {
|
|
||||||
None = 0,
|
|
||||||
MetricNode,
|
|
||||||
GeometryNode,
|
|
||||||
GeometryObject,
|
|
||||||
Material,
|
|
||||||
BracketIn,
|
|
||||||
BracketOut,
|
|
||||||
CurlyBracketIn,
|
|
||||||
CurlyBracketOut,
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
OpenGEXParser( const std::vector<char> &buffer );
|
|
||||||
~OpenGEXParser();
|
|
||||||
void parse();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
std::string getNextToken();
|
|
||||||
bool skipComments();
|
|
||||||
void readUntilEndOfLine();
|
|
||||||
bool parseNextNode();
|
|
||||||
bool getNodeHeader( std::string &name );
|
|
||||||
bool getBracketOpen();
|
|
||||||
bool getBracketClose();
|
|
||||||
bool getStringData( std::string &data );
|
|
||||||
bool getFloatData( size_t num, float *data );
|
|
||||||
bool getNodeData( const std::string &nodeType );
|
|
||||||
bool getMetricAttributeKey( std::string &attribName );
|
|
||||||
bool onMetricNode( const std::string &attribName );
|
|
||||||
bool onGeometryNode();
|
|
||||||
bool onGeometryObject();
|
|
||||||
bool onMaterial();
|
|
||||||
|
|
||||||
private:
|
|
||||||
OpenGEXParser( const OpenGEXParser & );
|
|
||||||
OpenGEXParser &operator = ( const OpenGEXParser & );
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::vector<char> &m_buffer;
|
|
||||||
std::vector<TokenType> m_nodeTypeStack;
|
|
||||||
OpenGEXModel m_model;
|
|
||||||
size_t m_index;
|
|
||||||
size_t m_buffersize;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // Namespace openGEX
|
|
||||||
} // Namespace Assimp
|
|
||||||
|
|
||||||
#endif // ASSIMP_BUILD_NO_OPEMGEX_IMPORTER
|
|
||||||
|
|
||||||
#endif // ASSIMP_OPENGEX_OPENGEXPARSER_H_INC
|
|
|
@ -116,6 +116,14 @@ const std::string &DDLNode::getName() const {
|
||||||
return m_name;
|
return m_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DDLNode::setProperties( Property *prop ) {
|
||||||
|
m_properties = prop;
|
||||||
|
}
|
||||||
|
|
||||||
|
Property *DDLNode::getProperties() const {
|
||||||
|
return m_properties;
|
||||||
|
}
|
||||||
|
|
||||||
void DDLNode::setValue( Value *val ) {
|
void DDLNode::setValue( Value *val ) {
|
||||||
m_value = val;
|
m_value = val;
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,22 +104,18 @@ static void logMessage( LogSeverity severity, const std::string &msg ) {
|
||||||
|
|
||||||
OpenDDLParser::OpenDDLParser()
|
OpenDDLParser::OpenDDLParser()
|
||||||
: m_logCallback( logMessage )
|
: m_logCallback( logMessage )
|
||||||
, m_ownsBuffer( false )
|
, m_buffer()
|
||||||
, m_buffer( ddl_nullptr )
|
|
||||||
, m_len( 0 )
|
|
||||||
, m_stack()
|
, m_stack()
|
||||||
, m_context( ddl_nullptr ) {
|
, m_context( ddl_nullptr ) {
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
OpenDDLParser::OpenDDLParser( char *buffer, size_t len, bool ownsIt )
|
OpenDDLParser::OpenDDLParser( char *buffer, size_t len )
|
||||||
: m_logCallback( &logMessage )
|
: m_logCallback( &logMessage )
|
||||||
, m_ownsBuffer( false )
|
, m_buffer()
|
||||||
, m_buffer( ddl_nullptr )
|
|
||||||
, m_len( 0 )
|
|
||||||
, m_context( ddl_nullptr ) {
|
, m_context( ddl_nullptr ) {
|
||||||
if( 0 != m_len ) {
|
if( 0 != len ) {
|
||||||
setBuffer( buffer, len, ownsIt );
|
setBuffer( buffer, len );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,41 +137,36 @@ OpenDDLParser::logCallback OpenDDLParser::getLogCallback() const {
|
||||||
return m_logCallback;
|
return m_logCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenDDLParser::setBuffer( char *buffer, size_t len, bool ownsIt ) {
|
void OpenDDLParser::setBuffer( char *buffer, size_t len ) {
|
||||||
if( m_buffer && m_ownsBuffer ) {
|
clear();
|
||||||
delete[] m_buffer;
|
if( 0 == len ) {
|
||||||
m_buffer = ddl_nullptr;
|
return;
|
||||||
m_len = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_ownsBuffer = ownsIt;
|
m_buffer.resize( len );
|
||||||
if( m_ownsBuffer ) {
|
::memcpy(&m_buffer[ 0 ], buffer, len );
|
||||||
// when we are owning the buffer we will do a deep copy
|
|
||||||
m_buffer = new char[ len ];
|
|
||||||
m_len = len;
|
|
||||||
::memcpy( m_buffer, buffer, len );
|
|
||||||
} else {
|
|
||||||
// when we are not owning the buffer, we just do a shallow copy
|
|
||||||
m_buffer = buffer;
|
|
||||||
m_len = len;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *OpenDDLParser::getBuffer() const {
|
void OpenDDLParser::setBuffer( const std::vector<char> &buffer ) {
|
||||||
return m_buffer;
|
clear();
|
||||||
|
m_buffer.resize( buffer.size() );
|
||||||
|
std::copy( buffer.begin(), buffer.end(), m_buffer.begin() );
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *OpenDDLParser::getBuffer() const {
|
||||||
|
if( m_buffer.empty() ) {
|
||||||
|
return ddl_nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return &m_buffer[ 0 ];
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t OpenDDLParser::getBufferSize() const {
|
size_t OpenDDLParser::getBufferSize() const {
|
||||||
return m_len;
|
return m_buffer.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenDDLParser::clear() {
|
void OpenDDLParser::clear() {
|
||||||
if( m_ownsBuffer ) {
|
m_buffer.resize( 0 );
|
||||||
delete [] m_buffer;
|
|
||||||
}
|
|
||||||
m_buffer = ddl_nullptr;
|
|
||||||
m_len = 0;
|
|
||||||
|
|
||||||
if( m_context ) {
|
if( m_context ) {
|
||||||
m_context->m_root = ddl_nullptr;
|
m_context->m_root = ddl_nullptr;
|
||||||
}
|
}
|
||||||
|
@ -184,11 +175,11 @@ void OpenDDLParser::clear() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OpenDDLParser::parse() {
|
bool OpenDDLParser::parse() {
|
||||||
if( 0 == m_len ) {
|
if( m_buffer.empty() ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
normalizeBuffer( m_buffer, m_len );
|
normalizeBuffer( m_buffer );
|
||||||
|
|
||||||
m_context = new Context;
|
m_context = new Context;
|
||||||
m_context->m_root = DDLNode::create( "root", "", ddl_nullptr );
|
m_context->m_root = DDLNode::create( "root", "", ddl_nullptr );
|
||||||
|
@ -196,9 +187,11 @@ bool OpenDDLParser::parse() {
|
||||||
|
|
||||||
// do the main parsing
|
// do the main parsing
|
||||||
char *current( &m_buffer[ 0 ] );
|
char *current( &m_buffer[ 0 ] );
|
||||||
char *end( &m_buffer[ m_len - 1 ] + 1 );
|
char *end( &m_buffer[ m_buffer.size() - 1 ] + 1 );
|
||||||
while( current != end ) {
|
size_t pos( current - &m_buffer[ 0 ] );
|
||||||
|
while( pos < m_buffer.size() ) {
|
||||||
current = parseNextNode( current, end );
|
current = parseNextNode( current, end );
|
||||||
|
pos = current - &m_buffer[ 0 ];
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -219,7 +212,7 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) {
|
||||||
in = OpenDDLParser::parseIdentifier( in, end, &id );
|
in = OpenDDLParser::parseIdentifier( in, end, &id );
|
||||||
|
|
||||||
#ifdef DEBUG_HEADER_NAME
|
#ifdef DEBUG_HEADER_NAME
|
||||||
if( id ) {
|
if( ddl_nullptr != id ) {
|
||||||
std::cout << id->m_buffer << std::endl;
|
std::cout << id->m_buffer << std::endl;
|
||||||
}
|
}
|
||||||
#endif // DEBUG_HEADER_NAME
|
#endif // DEBUG_HEADER_NAME
|
||||||
|
@ -253,7 +246,11 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) {
|
||||||
|
|
||||||
// set the properties
|
// set the properties
|
||||||
if( ddl_nullptr != first ) {
|
if( ddl_nullptr != first ) {
|
||||||
m_context->setProperties( first );
|
std::cout << id->m_buffer << std::endl;
|
||||||
|
DDLNode *current( top() );
|
||||||
|
if( current ) {
|
||||||
|
current->setProperties( first );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// store the node
|
// store the node
|
||||||
|
@ -317,6 +314,9 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) {
|
||||||
if( *in != '}' ) {
|
if( *in != '}' ) {
|
||||||
logInvalidTokenError( in, "}", m_logCallback );
|
logInvalidTokenError( in, "}", m_logCallback );
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
in++;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
in = parseHeader( in, end );
|
in = parseHeader( in, end );
|
||||||
in = parseStructure( in, end );
|
in = parseStructure( in, end );
|
||||||
|
@ -327,6 +327,7 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) {
|
||||||
return in;
|
return in;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
in = getNextToken( in, end );
|
||||||
|
|
||||||
in++;
|
in++;
|
||||||
|
|
||||||
|
@ -373,33 +374,29 @@ Context *OpenDDLParser::getContext() const {
|
||||||
return m_context;
|
return m_context;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenDDLParser::normalizeBuffer( char *buffer, size_t len ) {
|
void OpenDDLParser::normalizeBuffer( std::vector<char> &buffer) {
|
||||||
if( nullptr == buffer || 0 == len ) {
|
if( buffer.empty() ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t writeIdx( 0 );
|
std::vector<char> newBuffer;
|
||||||
char *end( &buffer[ len ] + 1 );
|
const size_t len( buffer.size() );
|
||||||
|
char *end( &buffer[ len-1 ] + 1 );
|
||||||
for( size_t readIdx = 0; readIdx<len; ++readIdx ) {
|
for( size_t readIdx = 0; readIdx<len; ++readIdx ) {
|
||||||
char *c( &buffer[readIdx] );
|
char *c( &buffer[readIdx] );
|
||||||
// check for a comment
|
// check for a comment
|
||||||
if( !isComment<char>( c, end ) ) {
|
if( !isComment<char>( c, end ) ) {
|
||||||
buffer[ writeIdx ] = buffer[ readIdx ];
|
newBuffer.push_back( buffer[ readIdx ] );
|
||||||
writeIdx++;
|
|
||||||
} else {
|
} else {
|
||||||
readIdx++;
|
readIdx++;
|
||||||
// skip the comment and the rest of the line
|
// skip the comment and the rest of the line
|
||||||
while( !isEndofLine( buffer[ readIdx ] ) ) {
|
while( !isEndofLine( buffer[ readIdx ] ) ) {
|
||||||
readIdx++;
|
readIdx++;
|
||||||
}
|
}
|
||||||
buffer[writeIdx] = '\n';
|
newBuffer.push_back( '\n' );
|
||||||
writeIdx++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
buffer = newBuffer;
|
||||||
if( writeIdx < len ) {
|
|
||||||
buffer[ writeIdx ] = '\0';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *OpenDDLParser::parseName( char *in, char *end, Name **name ) {
|
char *OpenDDLParser::parseName( char *in, char *end, Name **name ) {
|
||||||
|
|
|
@ -55,6 +55,8 @@ public:
|
||||||
const std::string &getType() const;
|
const std::string &getType() const;
|
||||||
void setName( const std::string &name );
|
void setName( const std::string &name );
|
||||||
const std::string &getName() const;
|
const std::string &getName() const;
|
||||||
|
void setProperties( Property *prop );
|
||||||
|
Property *getProperties() const;
|
||||||
void setValue( Value *val );
|
void setValue( Value *val );
|
||||||
Value *getValue() const;
|
Value *getValue() const;
|
||||||
void setDataArrayList( DataArrayList *dtArrayList );
|
void setDataArrayList( DataArrayList *dtArrayList );
|
||||||
|
|
|
@ -25,6 +25,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
#define OPENDDLPARSER_OPENDDLPARSERCOMMON_H_INC
|
#define OPENDDLPARSER_OPENDDLPARSERCOMMON_H_INC
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -133,29 +135,24 @@ struct DataArrayList {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Context {
|
struct Context {
|
||||||
Property *m_properties;
|
|
||||||
DDLNode *m_root;
|
DDLNode *m_root;
|
||||||
|
|
||||||
Context()
|
Context()
|
||||||
: m_properties( ddl_nullptr )
|
: m_root( ddl_nullptr ) {
|
||||||
, m_root( ddl_nullptr ) {
|
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
void setProperties( Property *first );
|
|
||||||
Property *getProperties() const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct BufferIt {
|
||||||
|
std::vector<char> m_buffer;
|
||||||
|
size_t m_idx;
|
||||||
|
|
||||||
inline
|
BufferIt( const std::vector<char> &buffer )
|
||||||
void Context::setProperties( Property *first ) {
|
: m_buffer( buffer )
|
||||||
m_properties = first;
|
, m_idx( 0 ) {
|
||||||
}
|
// empty
|
||||||
|
|
||||||
inline
|
|
||||||
Property *Context::getProperties() const {
|
|
||||||
return m_properties;
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
END_ODDLPARSER_NS
|
END_ODDLPARSER_NS
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,12 @@ T *getNextToken( T *in, T *end ) {
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @brief Defines the log severity.
|
||||||
enum LogSeverity {
|
enum LogSeverity {
|
||||||
ddl_debug_msg = 0,
|
ddl_debug_msg = 0, ///< Debug message, for debugging
|
||||||
ddl_info_msg,
|
ddl_info_msg, ///< Info messages, normal mode
|
||||||
ddl_warn_msg,
|
ddl_warn_msg, ///< Parser warnings
|
||||||
ddl_error_msg,
|
ddl_error_msg ///< Parser errors
|
||||||
};
|
};
|
||||||
|
|
||||||
class DLL_ODDLPARSER_EXPORT OpenDDLParser {
|
class DLL_ODDLPARSER_EXPORT OpenDDLParser {
|
||||||
|
@ -63,12 +64,13 @@ public:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
OpenDDLParser();
|
OpenDDLParser();
|
||||||
OpenDDLParser( char *buffer, size_t len, bool ownsIt = false );
|
OpenDDLParser( char *buffer, size_t len );
|
||||||
~OpenDDLParser();
|
~OpenDDLParser();
|
||||||
void setLogCallback( logCallback callback );
|
void setLogCallback( logCallback callback );
|
||||||
logCallback getLogCallback() const;
|
logCallback getLogCallback() const;
|
||||||
void setBuffer( char *buffer, size_t len, bool ownsIt = false );
|
void setBuffer( char *buffer, size_t len );
|
||||||
char *getBuffer() const;
|
void setBuffer( const std::vector<char> &buffer );
|
||||||
|
const char *getBuffer() const;
|
||||||
size_t getBufferSize() const;
|
size_t getBufferSize() const;
|
||||||
void clear();
|
void clear();
|
||||||
bool parse();
|
bool parse();
|
||||||
|
@ -82,7 +84,7 @@ public:
|
||||||
Context *getContext() const;
|
Context *getContext() const;
|
||||||
|
|
||||||
public: // static parser helpers
|
public: // static parser helpers
|
||||||
static void normalizeBuffer( char *buffer, size_t len );
|
static void normalizeBuffer( std::vector<char> &buffer );
|
||||||
static char *parseName( char *in, char *end, Name **name );
|
static char *parseName( char *in, char *end, Name **name );
|
||||||
static char *parseIdentifier( char *in, char *end, Identifier **id );
|
static char *parseIdentifier( char *in, char *end, Identifier **id );
|
||||||
static char *parsePrimitiveDataType( char *in, char *end, Value::ValueType &type, size_t &len );
|
static char *parsePrimitiveDataType( char *in, char *end, Value::ValueType &type, size_t &len );
|
||||||
|
@ -103,9 +105,8 @@ private:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
logCallback m_logCallback;
|
logCallback m_logCallback;
|
||||||
bool m_ownsBuffer;
|
std::vector<char> m_buffer;
|
||||||
char *m_buffer;
|
|
||||||
size_t m_len;
|
|
||||||
typedef std::vector<DDLNode*> DDLNodeStack;
|
typedef std::vector<DDLNode*> DDLNodeStack;
|
||||||
DDLNodeStack m_stack;
|
DDLNodeStack m_stack;
|
||||||
Context *m_context;
|
Context *m_context;
|
||||||
|
|
|
@ -28,19 +28,27 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
BEGIN_ODDLPARSER_NS
|
BEGIN_ODDLPARSER_NS
|
||||||
|
|
||||||
|
///------------------------------------------------------------------------------------------------
|
||||||
|
/// @brief This class implements a value.
|
||||||
|
///
|
||||||
|
/// Values are used to store data types like boolean, integer, floats, double and many mode. To get
|
||||||
|
/// an overview please check the enum VylueType ( @see Value::ValueType ).
|
||||||
|
/// Values can be single items or lists of items. They are implemented as linked lists.
|
||||||
|
///------------------------------------------------------------------------------------------------
|
||||||
class DLL_ODDLPARSER_EXPORT Value {
|
class DLL_ODDLPARSER_EXPORT Value {
|
||||||
public:
|
public:
|
||||||
|
/// @brief This enum describes the data type stored in the value.
|
||||||
enum ValueType {
|
enum ValueType {
|
||||||
ddl_none = -1,
|
ddl_none = -1, ///< Nothing specified
|
||||||
ddl_bool = 0,
|
ddl_bool = 0, ///< A boolean type
|
||||||
ddl_int8,
|
ddl_int8, ///< Integer type, 8 bytes
|
||||||
ddl_int16,
|
ddl_int16, ///< Integer type, 16 bytes
|
||||||
ddl_int32,
|
ddl_int32, ///< Integer type, 32 bytes
|
||||||
ddl_int64,
|
ddl_int64, ///< Integer type, 64 bytes
|
||||||
ddl_unsigned_int8,
|
ddl_unsigned_int8, ///< Unsigned integer type, 8 bytes
|
||||||
ddl_unsigned_int16,
|
ddl_unsigned_int16, ///< Unsigned integer type, 16 bytes
|
||||||
ddl_unsigned_int32,
|
ddl_unsigned_int32, ///< Unsigned integer type, 32 bytes
|
||||||
ddl_unsigned_int64,
|
ddl_unsigned_int64, ///< Unsigned integer type, 64 bytes
|
||||||
ddl_half,
|
ddl_half,
|
||||||
ddl_float,
|
ddl_float,
|
||||||
ddl_double,
|
ddl_double,
|
||||||
|
|
Loading…
Reference in New Issue