USDA parser refactoring(W.I.P.)

This commit is contained in:
Syoyo Fujita
2022-07-16 19:51:17 +09:00
parent 9f92455ee9
commit 05f8e93682
7 changed files with 2064 additions and 8213 deletions

View File

@@ -51,7 +51,7 @@ option(TINYUSDZ_PRODUCTION_BUILD
"Build for production release(e.g. disables debug print, do not include full filepath in error messages)" OFF)
# -- modules --
option(TINYUSDZ_WITH_MODULE_USDA_PARSER "Build with USDA parser feature" ON)
option(TINYUSDZ_WITH_MODULE_USDA_READER "Build with USDA reader feature" ON)
option(TINYUSDZ_WITH_MODULE_USDA_WRITER "Build with USDA writer feature" ON)
# USDC(Crate binary) reader is mandatory in most situation, so this option is primarily for developer build.
@@ -149,7 +149,8 @@ endif()
set(TINYUSDZ_SOURCES
${PROJECT_SOURCE_DIR}/src/tinyusdz.cc
${PROJECT_SOURCE_DIR}/src/usda-parser.cc
${PROJECT_SOURCE_DIR}/src/ascii-parser.cc
${PROJECT_SOURCE_DIR}/src/usda-reader.cc
${PROJECT_SOURCE_DIR}/src/usdc-reader.cc
${PROJECT_SOURCE_DIR}/src/usda-writer.cc
${PROJECT_SOURCE_DIR}/src/usdc-writer.cc
@@ -402,9 +403,9 @@ foreach(TINYUSDZ_LIB_TARGET ${TINYUSDZ_LIBS})
endif()
# default = enable module, so invert definition
if (NOT TINYUSDZ_WITH_MODULE_USDA_PARSER)
if (NOT TINYUSDZ_WITH_MODULE_USDA_READER)
target_compile_definitions(${TINYUSDZ_LIB_TARGET}
PRIVATE "TINYUSDZ_DISABLE_MODULE_USDA_PARSER")
PRIVATE "TINYUSDZ_DISABLE_MODULE_USDA_READER")
endif()
if (NOT TINYUSDZ_WITH_MODULE_USDA_WRITER)
@@ -412,9 +413,9 @@ foreach(TINYUSDZ_LIB_TARGET ${TINYUSDZ_LIBS})
PRIVATE "TINYUSDZ_DISABLE_MODULE_USDA_WRITER")
endif()
if (NOT TINYUSDZ_WITH_MODULE_USDC_PARSER)
if (NOT TINYUSDZ_WITH_MODULE_USDC_READER)
target_compile_definitions(${TINYUSDZ_LIB_TARGET}
PRIVATE "TINYUSDZ_DISABLE_MODULE_USDC_PARSER")
PRIVATE "TINYUSDZ_DISABLE_MODULE_USDC_READER")
endif()
if (NOT TINYUSDZ_WITH_MODULE_USDC_WRITER)
@@ -528,7 +529,7 @@ if(TINYUSDZ_WITH_PYTHON AND (NOT TINYUSDZ_WITH_BLENDER_ADDON))
endif()
if(TINYUSDZ_WITH_TOOL_USDA_PARSER AND TINYUSDZ_WITH_MODULE_USDA_PARSER)
if(TINYUSDZ_WITH_TOOL_USDA_PARSER AND TINYUSDZ_WITH_MODULE_USDA_READER)
add_executable(usda_parser
${CMAKE_CURRENT_SOURCE_DIR}/sandbox/usda/parser-main.cc)
add_sanitizers(usda_parser)
@@ -583,7 +584,7 @@ if(TINYUSDZ_BUILD_TESTS)
#
# USDA parser tester
#
if(TINYUSDZ_WITH_TOOL_USDA_PARSER AND TINYUSDZ_WITH_MODULE_USDA_PARSER)
if(TINYUSDZ_WITH_TOOL_USDA_PARSER AND TINYUSDZ_WITH_MODULE_USDA_READER)
add_test(
NAME usda-parser-unit-test
COMMAND python ${PROJECT_SOURCE_DIR}/tests/usda/unit-runner.py --app

View File

@@ -2,7 +2,7 @@
#include <fstream>
#include "stream-reader.hh"
#include "usda-parser.hh"
#include "usda-reader.hh"
#include "io-util.hh"
@@ -24,17 +24,17 @@ int main(int argc, char **argv) {
}
tinyusdz::StreamReader sr(data.data(), data.size(), /* swap endian */ false);
tinyusdz::usda::USDAParser parser(&sr);
tinyusdz::usda::USDAReader reader(&sr);
std::cout << "Basedir = " << base_dir << "\n";
parser.SetBaseDir(base_dir);
reader.SetBaseDir(base_dir);
{
bool ret = parser.Parse();
bool ret = reader.Read();
if (!ret) {
std::cerr << "Failed to parse .usda: \n";
std::cerr << parser.GetError() << "\n";
std::cerr << reader.GetError() << "\n";
return -1;
} else {
std::cout << "ok\n";

View File

@@ -12,13 +12,14 @@ cd ${builddir} && CXX=clang++ CC=clang cmake \
-DTINYUSDZ_WITH_OPENSUBDIV=0 \
-DTINYUSDZ_WITH_AUDIO=0 \
-DTINYUSDZ_WITH_EXR=0 \
-DTINYUSDZ_WITH_MODULE_USDA_PARSER=0 \
-DTINYUSDZ_WITH_MODULE_USDA_WRITER=0 \
-DTINYUSDZ_WITH_MODULE_USDC_WRITER=0 \
-DTINYUSDZ_WITH_MODULE_USDA_READER=1 \
-DTINYUSDZ_WITH_MODULE_USDA_WRITER=1 \
-DTINYUSDZ_WITH_MODULE_USDC_READER=1 \
-DTINYUSDZ_WITH_MODULE_USDC_WRITER=1 \
-DTINYUSDZ_WITH_PYTHON=0 \
-DTINYUSDZ_WITH_USDOBJ=0 \
-DTINYUSDZ_WITH_USDVOX=0 \
-DTINYUSDZ_COMPILE_TIME_TRACE=1 \
-DTINYUSDZ_COMPILE_TIME_TRACE=0 \
-DSANITIZE_ADDRESS=0 \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
..

View File

@@ -50,7 +50,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "tinyusdz.hh"
#include "io-util.hh"
#include "pprinter.hh"
#include "usda-parser.hh"
#include "usda-reader.hh"
#include "usdc-reader.hh"
#if defined(TINYUSDZ_SUPPORT_AUDIO)
@@ -678,19 +678,19 @@ bool LoadUSDAFromMemory(const uint8_t *addr, const size_t length, const std::str
}
tinyusdz::StreamReader sr(addr, length, /* swap endian */ false);
tinyusdz::usda::USDAParser parser(&sr);
tinyusdz::usda::USDAReader reader(&sr);
parser.SetBaseDir(base_dir);
reader.SetBaseDir(base_dir);
(void)options;
{
bool ret = parser.Parse();
bool ret = reader.Read();
if (!ret) {
if (err) {
(*err) += "Failed to parse USDA\n";
(*err) += parser.GetError();
(*err) += reader.GetError();
}
return false;

File diff suppressed because it is too large Load Diff

2030
src/usda-reader.cc Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -4,6 +4,8 @@
#include "tinyusdz.hh"
#include "stream-reader.hh"
#include "ascii-parser.hh"
namespace tinyusdz {
namespace usda {
@@ -21,19 +23,19 @@ enum LoadState {
///
bool IsUSDA(const std::string &filename, size_t max_filesize = 0);
class USDAParser {
class USDAReader {
public:
struct ParseState {
int64_t loc{-1}; // byte location in StreamReder
};
USDAParser() = delete;
USDAParser(tinyusdz::StreamReader *sr);
USDAReader() = delete;
USDAReader(tinyusdz::StreamReader *sr);
USDAParser(const USDAParser &rhs) = delete;
USDAParser(USDAParser &&rhs) = delete;
USDAReader(const USDAReader &rhs) = delete;
USDAReader(USDAReader &&rhs) = delete;
~USDAParser();
~USDAReader();
///
@@ -47,9 +49,9 @@ class USDAParser {
bool CheckHeader();
///
/// Parser entry point
/// Reader entry point
///
bool Parse(LoadState state = LOAD_STATE_TOPLEVEL);
bool Read(LoadState state = LOAD_STATE_TOPLEVEL);
///
///