1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-29 07:37:45 +00:00

exd_struct_test should be fine now

This commit is contained in:
NotAdam 2018-10-27 22:29:38 +11:00
parent ffb0b31663
commit 8a78b88ddf
3 changed files with 53 additions and 84 deletions

View file

@ -1,5 +1,8 @@
# Sapphire - FINAL FANTASY XIV Server Emulator # Sapphire - FINAL FANTASY XIV Server Emulator
![FFXIV Sapphire](https://i.imgur.com/I4bj1tR.png)
<p align="center">
<img src="https://i.imgur.com/I4bj1tR.png" alt="FFXIV Sapphire"/>
</p>
[![Discord Server](https://img.shields.io/badge/discord-Sapphire-7289DA.svg)](https://discord.gg/xxcdCER) [![Discord Server](https://img.shields.io/badge/discord-Sapphire-7289DA.svg)](https://discord.gg/xxcdCER)
[![Linux Build Status](https://travis-ci.org/SapphireMordred/Sapphire.svg?branch=master)](https://travis-ci.org/SapphireMordred/Sapphire) [![Linux Build Status](https://travis-ci.org/SapphireMordred/Sapphire.svg?branch=master)](https://travis-ci.org/SapphireMordred/Sapphire)

View file

@ -24,10 +24,8 @@ set_target_properties(exd_struct_gen PROPERTIES
) )
if (UNIX) if (UNIX)
target_link_libraries (exd_struct_gen common xivdat pthread mysqlclient dl z) target_link_libraries (exd_struct_gen common xivdat pthread mysqlclient dl z stdc++fs)
else() else()
target_link_libraries (exd_struct_gen common xivdat libmysql zlib1) target_link_libraries (exd_struct_gen common xivdat libmysql zlib1)
endif() endif()
target_link_libraries(exd_struct_gen ${Boost_LIBRARIES} ${Boost_LIBRARIES})

View file

@ -17,6 +17,7 @@
#include <fstream> #include <fstream>
#include <streambuf> #include <streambuf>
#include <regex> #include <regex>
#include <algorithm>
@ -111,77 +112,39 @@ std::string generateStruct( const std::string& exd )
int count = 0; int count = 0;
auto json = nlohmann::json(); auto json = nlohmann::json();
std::istream exJson( "ex.json" ); std::ifstream exJson( "ex.json" );
exJson >> json; exJson >> json;
for( auto& sheet : json["sheets"] ) for( auto& definition : json["sheets"][exd] )
{ {
std::string name = json["sheet"]; uint32_t index;
if( name != exd ) std::string converterTarget = "";
continue; bool isRepeat = false;
int num = 0;
index = definition["index"].get< uint32_t >();
indexToNameMap[ index ] = std::string( definition["name"] );
converterTarget = std::string( definition["converter"]["target"] );
if( nameTaken.find( converterTarget ) != nameTaken.end() )
indexToTarget[ index ] = converterTarget;
if( auto count = definition["count"] )
{
num = std::stoi( std::string( count ) );
isRepeat = true;
indexIsArrayMap[ index ] = true;
indexCountMap[ index ] = num;
std::string fName = definition["definition"]["name"];
indexToNameMap[ index ] = fName;
}
} }
BOOST_FOREACH( boost::property_tree::ptree::value_type& sheet, m_propTree.get_child( "sheets" ) )
{
std::string name = sheet.second.get< std::string >( "sheet" );
if( name != exd )
continue;
BOOST_FOREACH( boost::property_tree::ptree::value_type& show, sheet.second.get_child( "definitions" ) )
{
uint32_t index;
std::string converterTarget = "";
bool isRepeat = false;
int num = 0;
try
{
index = show.second.get< uint32_t >( "index" );
}
catch( ... )
{
index = 0;
}
try
{
std::string fieldName = show.second.get< std::string >( "name" );
indexToNameMap[ index ] = fieldName;
}
catch( ... )
{
}
try
{
converterTarget = show.second.get< std::string >( "converter.target" );
if( nameTaken.find( converterTarget ) != nameTaken.end() )
indexToTarget[ index ] = converterTarget;
}
catch( ... )
{
}
try
{
show.second.get< std::string >( "type" );
num = show.second.get< uint8_t >( "count" );
isRepeat = true;
indexIsArrayMap[ index ] = true;
indexCountMap[ index ] = num;
std::string fName = show.second.get< std::string >( "definition.name" );
indexToNameMap[ index ] = fName;
}
catch( ... )
{
}
}
}
std::string result = "struct " + exd + "\n{\n"; std::string result = "struct " + exd + "\n{\n";
@ -211,8 +174,12 @@ std::string generateStruct( const std::string& exd )
fieldName = indexToNameMap[ count ]; fieldName = indexToNameMap[ count ];
} }
fieldName[ 0 ] = std::tolower( fieldName[ 0 ] ); fieldName[ 0 ] = std::tolower( fieldName[ 0 ] );
fieldName.erase( std::remove_if( fieldName, std::is_any_of( ",-':![](){}<>% \x02\x1f\x01\x03" ) ),
fieldName.end() ); std::string badChars = ",-':![](){}<>% \x02\x1f\x01\x03";
std::for_each( badChars.begin(), badChars.end(), [ &fieldName ]( const char c )
{
fieldName.erase( std::remove( fieldName.begin(), fieldName.end(), c ), fieldName.end() );
});
for( auto entry : numberToStringMap ) for( auto entry : numberToStringMap )
{ {
@ -340,9 +307,10 @@ int main( int argc, char** argv )
std::istreambuf_iterator< char >() ); std::istreambuf_iterator< char >() );
using boost::property_tree::ptree; std::ifstream exJson( "ex.json" );
ptree m_propTree;
boost::property_tree::read_json( "ex.json", m_propTree ); auto json = nlohmann::json();
exJson >> json;
g_log.info( "Setting up EXD data" ); g_log.info( "Setting up EXD data" );
if( !g_exdData.init( datLocation ) ) if( !g_exdData.init( datLocation ) )
@ -369,19 +337,19 @@ int main( int argc, char** argv )
//nameTaken[name] = "1"; //nameTaken[name] = "1";
//} //}
BOOST_FOREACH( boost::property_tree::ptree::value_type& sheet, m_propTree.get_child( "sheets" ) ) for( auto& sheet : json["sheets"] )
{ {
std::string name = sheet.second.get< std::string >( "sheet" ); std::string name = json["sheet"];
forwards += "struct " + name + ";\n"; forwards += "struct " + name + ";\n";
structDefs += generateStruct( name ); structDefs += generateStruct( name );
dataDecl += generateDatAccessDecl( name ); dataDecl += generateDatAccessDecl( name );
idListsDecl += generateIdListDecl( name ); idListsDecl += generateIdListDecl( name );
getterDecl += generateDirectGetters( name ); getterDecl += generateDirectGetters( name );
datAccCall += generateSetDatAccessCall( name ); datAccCall += generateSetDatAccessCall( name );
constructorDecl += generateConstructorsDecl( name ); constructorDecl += generateConstructorsDecl( name );
idListGetters += generateIdListGetter( name ); idListGetters += generateIdListGetter( name );
} }
getterDecl += getterDecl +=
"\n template< class T >\n" "\n template< class T >\n"