closes https://github.com/assimp/assimp/issues/3975: Use latest version of OpenDDL-Parser
parent
26538a4f4a
commit
16c3f82222
|
@ -132,6 +132,24 @@ OpenDDLParser::~OpenDDLParser() {
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OpenDDLParser::logToStream(FILE *f, LogSeverity severity, const std::string &message) {
|
||||||
|
if (f) {
|
||||||
|
const char *tag = "none";
|
||||||
|
switch (severity) {
|
||||||
|
case ddl_debug_msg: tag = "debug"; break;
|
||||||
|
case ddl_info_msg: tag = "info"; break;
|
||||||
|
case ddl_warn_msg: tag = "warn"; break;
|
||||||
|
case ddl_error_msg: tag = "error"; break;
|
||||||
|
}
|
||||||
|
fprintf(f, "OpenDDLParser: (%5s) %s\n", tag, message.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OpenDDLParser::logCallback OpenDDLParser::StdLogCallback (FILE *destination) {
|
||||||
|
using namespace std::placeholders;
|
||||||
|
return std::bind(logToStream, destination ? destination : stderr, _1, _2);
|
||||||
|
}
|
||||||
|
|
||||||
void OpenDDLParser::setLogCallback(logCallback callback) {
|
void OpenDDLParser::setLogCallback(logCallback callback) {
|
||||||
// install user-specific log callback; null = no log callback
|
// install user-specific log callback; null = no log callback
|
||||||
m_logCallback = callback;
|
m_logCallback = callback;
|
||||||
|
@ -171,12 +189,8 @@ size_t OpenDDLParser::getBufferSize() const {
|
||||||
|
|
||||||
void OpenDDLParser::clear() {
|
void OpenDDLParser::clear() {
|
||||||
m_buffer.resize(0);
|
m_buffer.resize(0);
|
||||||
if (nullptr != m_context) {
|
|
||||||
delete m_context;
|
delete m_context;
|
||||||
m_context = nullptr;
|
m_context = nullptr;
|
||||||
}
|
|
||||||
|
|
||||||
// DDLNode::releaseNodes();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OpenDDLParser::validate() {
|
bool OpenDDLParser::validate() {
|
||||||
|
@ -506,8 +520,10 @@ char *OpenDDLParser::parseName(char *in, char *end, Name **name) {
|
||||||
in = parseIdentifier(in, end, &id);
|
in = parseIdentifier(in, end, &id);
|
||||||
if (id) {
|
if (id) {
|
||||||
currentName = new Name(ntype, id);
|
currentName = new Name(ntype, id);
|
||||||
|
if (currentName) {
|
||||||
*name = currentName;
|
*name = currentName;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,12 +113,13 @@ Value::~Value() {
|
||||||
if (m_data != nullptr) {
|
if (m_data != nullptr) {
|
||||||
if (m_type == ValueType::ddl_ref) {
|
if (m_type == ValueType::ddl_ref) {
|
||||||
Reference *tmp = (Reference *)m_data;
|
Reference *tmp = (Reference *)m_data;
|
||||||
if (tmp != nullptr)
|
if (tmp != nullptr) {
|
||||||
delete tmp;
|
delete tmp;
|
||||||
} else
|
}
|
||||||
|
} else {
|
||||||
delete[] m_data;
|
delete[] m_data;
|
||||||
}
|
}
|
||||||
if (m_next != nullptr)
|
}
|
||||||
delete m_next;
|
delete m_next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
BEGIN_ODDLPARSER_NS
|
BEGIN_ODDLPARSER_NS
|
||||||
|
|
||||||
|
@ -97,8 +98,8 @@ DLL_ODDLPARSER_EXPORT const char *getTypeToken(Value::ValueType type);
|
||||||
//-------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------
|
||||||
class DLL_ODDLPARSER_EXPORT OpenDDLParser {
|
class DLL_ODDLPARSER_EXPORT OpenDDLParser {
|
||||||
public:
|
public:
|
||||||
/// @brief The log callback function pointer.
|
/// @brief The log callback function.
|
||||||
typedef void (*logCallback)(LogSeverity severity, const std::string &msg);
|
typedef std::function<void (LogSeverity severity, const std::string &msg)> logCallback;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// @brief The default class constructor.
|
/// @brief The default class constructor.
|
||||||
|
@ -120,6 +121,11 @@ public:
|
||||||
/// @return The current log callback.
|
/// @return The current log callback.
|
||||||
logCallback getLogCallback() const;
|
logCallback getLogCallback() const;
|
||||||
|
|
||||||
|
/// @brief A default log callback that writes to a FILE.
|
||||||
|
/// @param destination [in] Output stream. NULL will use stderr.
|
||||||
|
/// @return A callback that you can pass to setLogCallback.
|
||||||
|
static logCallback StdLogCallback(FILE *destination = nullptr);
|
||||||
|
|
||||||
/// @brief Assigns a new buffer to parse.
|
/// @brief Assigns a new buffer to parse.
|
||||||
/// @param buffer [in] The buffer
|
/// @param buffer [in] The buffer
|
||||||
/// @param len [in] Size of the buffer
|
/// @param len [in] Size of the buffer
|
||||||
|
@ -192,6 +198,9 @@ private:
|
||||||
typedef std::vector<DDLNode *> DDLNodeStack;
|
typedef std::vector<DDLNode *> DDLNodeStack;
|
||||||
DDLNodeStack m_stack;
|
DDLNodeStack m_stack;
|
||||||
Context *m_context;
|
Context *m_context;
|
||||||
|
|
||||||
|
/// @brief Callback for StdLogCallback(). Not meant to be called directly.
|
||||||
|
static void logToStream (FILE *, LogSeverity, const std::string &);
|
||||||
};
|
};
|
||||||
|
|
||||||
END_ODDLPARSER_NS
|
END_ODDLPARSER_NS
|
||||||
|
|
Loading…
Reference in New Issue