More migration to T_FSPath

This commit is contained in:
Emmanuel BENOîT 2017-12-27 14:53:19 +01:00
parent 3f6c61cfd3
commit 68f6c49066
8 changed files with 68 additions and 44 deletions

View file

@ -36,7 +36,8 @@ class T_OpsParser : public ebcl::A_PrivateImplementation
}
}
bool parse( ebcl::T_SRDList const& input ) noexcept;
bool parse( T_FSPath const& filePath ,
ebcl::T_SRDList const& input ) noexcept;
T_Array< ebcl::T_SRDError > const& errors( ) const noexcept
{ return errors_; }
@ -92,7 +93,7 @@ class T_ScriptManager : public A_ProjectPathListener
{ return errors_; }
private:
T_String path_;
T_FSPath path_;
T_WatchedFiles watcher_;
T_OpsParser parser_;

View file

@ -58,7 +58,7 @@ void T_ScriptManager::projectPathChanged( ) noexcept
{
path_ = Common::Project( ).pathOf( "demo.srd" );
watcher_.clear( );
watcher_.watch( path_ );
watcher_.watch( path_.toString( ) );
loadScript( );
}
@ -70,7 +70,7 @@ void T_ScriptManager::loadScript( ) noexcept
errors_.clear( );
using namespace ebcl;
T_File input( path_ , E_FileMode::READ_ONLY );
T_File input( path_.toString( ) , E_FileMode::READ_ONLY );
try {
input.open( );
} catch ( X_StreamError const& e ) {
@ -80,7 +80,7 @@ void T_ScriptManager::loadScript( ) noexcept
sb << " (error code " << e.systemError( ) << ")";
}
errors_.addNew( std::move( sb ) ,
T_SRDLocation{ path_ , 1 , 1 } );
T_SRDLocation{ path_.toString( ) , 1 , 1 } );
DumpSRDErrors( "Script not found" , errors_ );
return;
}
@ -91,7 +91,7 @@ void T_ScriptManager::loadScript( ) noexcept
try {
T_SRDTextReader srdReader{ srdOut };
T_FileInputStream fis{ input };
srdReader.read( path_ , fis );
srdReader.read( path_.toString( ) , fis );
} catch ( X_StreamError const& e ) {
T_StringBuilder sb;
sb << "could not load: " << e.what( );
@ -99,7 +99,7 @@ void T_ScriptManager::loadScript( ) noexcept
sb << " (error code " << e.systemError( ) << ")";
}
errors_.addNew( std::move( sb ) ,
T_SRDLocation{ path_ , 1 , 1 } );
T_SRDLocation{ path_.toString( ) , 1 , 1 } );
DumpSRDErrors( "Script not loaded" , errors_ );
return;
@ -115,7 +115,7 @@ void T_ScriptManager::loadScript( ) noexcept
}
// Parse the fuck
if ( !parser_.parse( srdOut.list( ) ) ) {
if ( !parser_.parse( path_ , srdOut.list( ) ) ) {
errors_.addAll( parser_.errors( ) );
DumpSRDErrors( "Parse errors" , errors_ );
return;

View file

@ -2219,6 +2219,7 @@ T_OpsParser::T_OpsParser( ) noexcept
{}
bool T_OpsParser::parse(
T_FSPath const& filePath ,
T_SRDList const& input ) noexcept
{
errors_.clear( );

View file

@ -31,14 +31,26 @@ void T_Project::setBasePath(
/*----------------------------------------------------------------------------*/
T_String T_Project::pathOf(
T_String const& file ) const noexcept
T_FSPath T_Project::pathOf(
T_FSPath const& file ) const noexcept
{
return ( basePath_ + T_FSPath{ file } ).canonical( ).toString( );
return ( basePath_ + file ).canonical( );
}
T_String T_Project::pathOf(
T_FSPath T_Project::pathOf(
char const* file ) const noexcept
{
return ( basePath_ + T_FSPath{ file } ).canonical( ).toString( );
return pathOf( T_String{ file } );
}
T_String T_Project::strPathOf(
T_FSPath const& file ) const noexcept
{
return pathOf( file ).toString( );
}
T_String T_Project::strPathOf(
char const* file ) const noexcept
{
return strPathOf( T_String{ file } );
}

View file

@ -26,8 +26,11 @@ struct T_Project
T_FSPath const& basePath( ) const noexcept
{ return basePath_; }
T_String pathOf( T_String const& file ) const noexcept;
T_String pathOf( char const* file ) const noexcept;
T_FSPath pathOf( T_FSPath const& file ) const noexcept;
T_FSPath pathOf( char const* file ) const noexcept;
T_String strPathOf( T_FSPath const& file ) const noexcept;
T_String strPathOf( char const* file ) const noexcept;
void addListener( A_ProjectPathListener* listener ) noexcept
{ listeners_.add( listener ); }

View file

@ -684,7 +684,7 @@ T_SyncManager::T_SyncManager( ) noexcept
{
auto& p{ Common::Project( ) };
p.addListener( this );
curvesFile_ = p.pathOf( "curves.srd" );
curvesFile_ = p.strPathOf( "curves.srd" );
watcher_.watch( curvesFile_ );
loadCurves( false );
}
@ -977,7 +977,7 @@ void T_SyncManager::visitOverrides(
void T_SyncManager::projectPathChanged( ) noexcept
{
curvesFile_ = Common::Project( ).pathOf( "curves.srd" );
curvesFile_ = Common::Project( ).strPathOf( "curves.srd" );
watcher_.clear( );
watcher_.watch( curvesFile_ );
loadCurves( false );

View file

@ -31,11 +31,12 @@ const struct option CmdLineOpts_[] = {
void PrintStreamError(
char const* const prefix ,
T_String const& name ,
T_FSPath const& name ,
X_StreamError const& error ) noexcept
{
const T_FSPath rp{ name.makeRelative( Filesystem::Cwd( ) ) };
T_StringBuilder sb;
sb << prefix << " '" << name << "': " << error.what( );
sb << prefix << " '" << rp << "': " << error.what( );
if ( error.code( ) == E_StreamError::SYSTEM_ERROR ) {
sb << " (error code " << error.systemError( ) << ")";
}
@ -89,19 +90,15 @@ void WriteSRDErrors(
fprintf( stderr , "%s" , sb.data( ) );
}
T_String FilePath(
T_String const& path ,
T_FSPath FilePath(
T_FSPath const& path ,
char const* const name ) noexcept
{
T_StringBuilder sb;
if ( path ) {
sb << path;
if ( !path.endsWith( "/" ) ) {
sb << '/';
const T_FSPath fp{ name };
if ( fp.isAbsolute( ) ) {
return fp.canonical( );
}
}
sb << name;
return T_String{ std::move( sb ) };
return ( path + fp ).canonical( );
}
@ -141,6 +138,17 @@ int main( int argc , char** argv )
}
}
const T_FSPath srcPath{ ([&](){
const T_FSPath raw{ oSrcPath };
if ( !raw.isAbsolute( ) ) {
return ( Filesystem::Cwd( ) + raw ).canonical( );
}
return raw.canonical( );
})() };
if ( !srcPath.isValid( ) ) {
fprintf( stderr , "Invalid source path\n" );
return EXIT_FAILURE;
}
// Logger setup
const uint32_t logLevel{ oLogLevel ? *oLogLevel : 0 };
@ -155,11 +163,11 @@ int main( int argc , char** argv )
// Build configurations
M_LOGSTR( "Loading build configurations" , 1 );
const T_String bcfgFile{ FilePath( oSrcPath , "build.srd" ) };
const auto bcfgFile{ FilePath( srcPath , "build.srd" ) };
const T_BuildConfiguration cfg{ [&]() {
try {
T_BuildConfigurationLoader bcfgLoader;
T_BuildConfigurations cfs{ bcfgLoader.load( bcfgFile ) };
T_BuildConfigurations cfs{ bcfgLoader.load( bcfgFile.toString( ) ) };
if ( oBuildCfg && !cfs.contains( oBuildCfg ) ) {
fprintf( stderr , "===== BUILD CONFIGURATIONS\n" );
fprintf( stderr , "Build configuration not found\n" );
@ -186,10 +194,10 @@ int main( int argc , char** argv )
// Load curves
M_LOGSTR( "Loading curves data" , 1 );
const T_String curvesFile{ FilePath( oSrcPath , "curves.srd" ) };
const auto curvesFile{ FilePath( srcPath , "curves.srd" ) };
T_SyncCurvesIO::T_Data p;
try {
p = T_SyncCurvesIO{}.load( curvesFile );
p = T_SyncCurvesIO{}.load( curvesFile.toString( ) );
} catch ( ebcl::X_StreamError const& e ) {
fprintf( stderr , "===== CURVES DATA\n" );
PrintStreamError( "Could not open" , curvesFile , e );
@ -202,10 +210,10 @@ int main( int argc , char** argv )
// Open and load script
M_LOGSTR( "Loading script" , 1 );
const T_String inputName{ FilePath( oSrcPath , "demo.srd" ) };
const auto inputName{ FilePath( srcPath , "demo.srd" ) };
T_SRDMemoryTarget srdOut;
{
T_File input( inputName , E_FileMode::READ_ONLY );
T_File input( inputName.toString( ) , E_FileMode::READ_ONLY );
try {
input.open( );
} catch ( X_StreamError const& e ) {
@ -216,7 +224,7 @@ int main( int argc , char** argv )
try {
T_SRDTextReader srdReader{ srdOut };
T_FileInputStream fis{ input };
srdReader.read( inputName , fis );
srdReader.read( inputName.toString( ) , fis );
} catch ( X_StreamError const& e ) {
fprintf( stderr , "===== SCRIPT\n" );
PrintStreamError( "Could not open" , inputName , e );
@ -231,7 +239,7 @@ int main( int argc , char** argv )
M_LOGSTR( "Parsing script" , 1 );
T_OpsParser parser;
parser.setLogger( logger );
if ( !parser.parse( srdOut.list( ) ) ) {
if ( !parser.parse( inputName , srdOut.list( ) ) ) {
WriteSRDErrors( "SCRIPT" , parser.errors( ) );
exit( EXIT_FAILURE );
}

View file

@ -536,10 +536,10 @@ void T_ShaderManager::update( )
// Check for missing files
for ( auto it = missing_.keys( ).cbegin( ) ; it.valid( ) ; ++it ) {
const bool exists( ([&sb] ( T_String const& name ) -> bool {
const bool exists( ([] ( T_String const& name ) -> bool {
T_FSPath p{ T_FSPath{ "shaders" } + T_FSPath{ name } };
struct stat buffer;
sb << "shaders/" << name << '\0';
return ( stat( Common::Project( ).pathOf( std::move( sb ) ).data( ) , &buffer ) == 0 );
return ( stat( Common::Project( ).strPathOf( p ).data( ) , &buffer ) == 0 );
})( *it ) );
if ( !exists ) {
continue;
@ -726,7 +726,7 @@ T_ShaderInput const* T_ShaderManager::getInput(
sb << "shaders/" << name;
return std::move( sb );
}() };
if ( !ni.load( Common::Project( ).pathOf( path ) ) ) {
if ( !ni.load( Common::Project( ).strPathOf( path ) ) ) {
return nullptr;
}
inputs_.add( name , NewOwned< T_ShaderInput >( std::move( ni ) ) );
@ -864,9 +864,8 @@ void T_ShaderManager::initProgram(
for ( auto i = 0u ; i < nf ; i ++ ) {
T_String const& fn( code.files.keys( )[ i ] );
if ( code.files.values( )[ i ] ) {
T_StringBuilder sb;
sb << "shaders/" << fn;
w.watch( Common::Project( ).pathOf( std::move( sb ) ) );
T_FSPath p{ T_FSPath{ "shaders" } + T_FSPath{ fn } };
w.watch( Common::Project( ).strPathOf( p ) );
} else {
auto& mset( missing_.getOrCreate( fn ) );
if ( !mset.contains( name ) ) {