diff --git a/engine/Makefile b/engine/Makefile index 5d2db5259d5..19e37801e80 100644 --- a/engine/Makefile +++ b/engine/Makefile @@ -55,7 +55,7 @@ endif MKDIR = mkdir CXX = g++ -CPP_FLAGS = -Wall -Wextra -Woverloaded-virtual -W -I. -DSC_SHARED_DATA=\"$(SHARED_DATA)\" --std=c++0x -O3 +CPP_FLAGS = -Wall -Wextra -Woverloaded-virtual -W -I. -DSC_SHARED_DATA=\"$(SHARED_DATA)\" --std=c++0x -O3 -Wno-inconsistent-missing-override OPTS = LINK_LIBS = diff --git a/engine/sc_timespan.hpp b/engine/sc_timespan.hpp index efbff442e0d..7a9f85cc9de 100644 --- a/engine/sc_timespan.hpp +++ b/engine/sc_timespan.hpp @@ -200,7 +200,11 @@ class timespan_t return timespan_t( std::numeric_limits::min() ); } }; - +inline std::ostream& operator<<(std::ostream &os, const timespan_t& x ) +{ + os << x.total_seconds() << "seconds"; + return os; +} } // namespace timespan_adl_barrier ========================================= using timespan_adl_barrier::timespan_t; diff --git a/engine/sc_util.hpp b/engine/sc_util.hpp index 873d7e6f165..0fa5172d03c 100644 --- a/engine/sc_util.hpp +++ b/engine/sc_util.hpp @@ -7,7 +7,12 @@ #include "config.hpp" +#include "sc_enums.hpp" +#include "dbc/data_enums.hh" +#include "dbc/specialization.hpp" #include +#include +#include // Forward delcarations struct player_t; diff --git a/engine/sim/sc_option.cpp b/engine/sim/sc_option.cpp index c3bd57c0a32..fa1dad1d0be 100644 --- a/engine/sim/sc_option.cpp +++ b/engine/sim/sc_option.cpp @@ -3,7 +3,13 @@ // Send questions to natehieter@gmail.com // ========================================================================== -#include "simulationcraft.hpp" +#include "sc_option.hpp" + +#include +#include + +#include "util/io.hpp" +#include "sc_util.hpp" namespace { // UNNAMED NAMESPACE ============================================ diff --git a/engine/sim/sc_option.hpp b/engine/sim/sc_option.hpp new file mode 100644 index 00000000000..8041a3dfb71 --- /dev/null +++ b/engine/sim/sc_option.hpp @@ -0,0 +1,96 @@ +// ========================================================================== +// Dedmonwakeen's Raid DPS/TPS Simulator. +// Send questions to natehieter@gmail.com +// ========================================================================== + +#pragma once + +#include "config.hpp" + +#include +#include +#include +#include +#include +#include +#include + +#include "sc_timespan.hpp" + +struct sim_t; + +// Options ================================================================== + +struct option_t +{ +public: + option_t( const std::string& name ) : + _name( name ) +{ } + virtual ~option_t() { } + bool parse_option( sim_t* sim , const std::string& n, const std::string& value ) const + { return parse( sim, n, value ); } + std::string name() const + { return _name; } + std::ostream& print_option( std::ostream& stream ) const + { return print( stream ); } +protected: + virtual bool parse( sim_t*, const std::string& name, const std::string& value ) const = 0; + virtual std::ostream& print( std::ostream& stream ) const = 0; +private: + std::string _name; +}; + + +namespace opts { + +typedef std::unordered_map map_t; +typedef std::function function_t; +typedef std::vector list_t; +bool parse( sim_t*, const std::vector>&, const std::string& name, const std::string& value ); +void parse( sim_t*, const std::string& context, const std::vector>&, const std::string& options_str ); +void parse( sim_t*, const std::string& context, const std::vector>&, const std::vector& strings ); +} +inline std::ostream& operator<<( std::ostream& stream, const std::unique_ptr& opt ) +{ return opt -> print_option( stream ); } + +std::unique_ptr opt_string( const std::string& n, std::string& v ); +std::unique_ptr opt_append( const std::string& n, std::string& v ); +std::unique_ptr opt_bool( const std::string& n, int& v ); +std::unique_ptr opt_bool( const std::string& n, bool& v ); +std::unique_ptr opt_uint64( const std::string& n, uint64_t& v ); +std::unique_ptr opt_int( const std::string& n, int& v ); +std::unique_ptr opt_int( const std::string& n, int& v, int , int ); +std::unique_ptr opt_uint( const std::string& n, unsigned& v ); +std::unique_ptr opt_uint( const std::string& n, unsigned& v, unsigned , unsigned ); +std::unique_ptr opt_float( const std::string& n, double& v ); +std::unique_ptr opt_float( const std::string& n, double& v, double , double ); +std::unique_ptr opt_timespan( const std::string& n, timespan_t& v ); +std::unique_ptr opt_timespan( const std::string& n, timespan_t& v, timespan_t , timespan_t ); +std::unique_ptr opt_list( const std::string& n, opts::list_t& v ); +std::unique_ptr opt_map( const std::string& n, opts::map_t& v ); +std::unique_ptr opt_func( const std::string& n, const opts::function_t& f ); +std::unique_ptr opt_deprecated( const std::string& n, const std::string& new_option ); + +struct option_tuple_t +{ + std::string scope, name, value; + option_tuple_t( const std::string& s, const std::string& n, const std::string& v ) : scope( s ), name( n ), value( v ) {} +}; + +struct option_db_t : public std::vector +{ + std::vector auto_path; + std::unordered_map var_map; + + option_db_t(); + void add( const std::string& scope, const std::string& name, const std::string& value ) + { + push_back( option_tuple_t( scope, name, value ) ); + } + bool parse_file( FILE* file ); + void parse_token( const std::string& token ); + void parse_line( const std::string& line ); + void parse_text( const std::string& text ); + void parse_args( const std::vector& args ); +}; diff --git a/engine/simulationcraft.hpp b/engine/simulationcraft.hpp index 4401c5514c0..07df3ae56be 100644 --- a/engine/simulationcraft.hpp +++ b/engine/simulationcraft.hpp @@ -109,11 +109,6 @@ class xml_writer_t; // Time class representing ingame time #include "sc_timespan.hpp" -inline std::ostream& operator<<(std::ostream &os, const timespan_t& x ) -{ - os << x.total_seconds() << "seconds"; - return os; -} // Generic programming tools #include "util/generic.hpp" @@ -227,60 +222,7 @@ struct stopwatch_t stopwatch_t( stopwatch_e t = STOPWATCH_CPU ) : type( t ) { mark(); } }; #include "sc_util.hpp" - -// Options ================================================================== - -struct option_t -{ -public: - option_t( const std::string& name ) : - _name( name ) -{ } - virtual ~option_t() { } - bool parse_option( sim_t* sim , const std::string& n, const std::string& value ) const - { return parse( sim, n, value ); } - std::string name() const - { return _name; } - std::ostream& print_option( std::ostream& stream ) const - { return print( stream ); } -protected: - virtual bool parse( sim_t*, const std::string& name, const std::string& value ) const = 0; - virtual std::ostream& print( std::ostream& stream ) const = 0; -private: - std::string _name; -}; - - -namespace opts { - -typedef std::map map_t; -typedef std::function function_t; -typedef std::vector list_t; -bool parse( sim_t*, const std::vector>&, const std::string& name, const std::string& value ); -void parse( sim_t*, const std::string& context, const std::vector>&, const std::string& options_str ); -void parse( sim_t*, const std::string& context, const std::vector>&, const std::vector& strings ); -} -inline std::ostream& operator<<( std::ostream& stream, const std::unique_ptr& opt ) -{ return opt -> print_option( stream ); } - -std::unique_ptr opt_string( const std::string& n, std::string& v ); -std::unique_ptr opt_append( const std::string& n, std::string& v ); -std::unique_ptr opt_bool( const std::string& n, int& v ); -std::unique_ptr opt_bool( const std::string& n, bool& v ); -std::unique_ptr opt_uint64( const std::string& n, uint64_t& v ); -std::unique_ptr opt_int( const std::string& n, int& v ); -std::unique_ptr opt_int( const std::string& n, int& v, int , int ); -std::unique_ptr opt_uint( const std::string& n, unsigned& v ); -std::unique_ptr opt_uint( const std::string& n, unsigned& v, unsigned , unsigned ); -std::unique_ptr opt_float( const std::string& n, double& v ); -std::unique_ptr opt_float( const std::string& n, double& v, double , double ); -std::unique_ptr opt_timespan( const std::string& n, timespan_t& v ); -std::unique_ptr opt_timespan( const std::string& n, timespan_t& v, timespan_t , timespan_t ); -std::unique_ptr opt_list( const std::string& n, opts::list_t& v ); -std::unique_ptr opt_map( const std::string& n, opts::map_t& v ); -std::unique_ptr opt_func( const std::string& n, const opts::function_t& f ); -std::unique_ptr opt_deprecated( const std::string& n, const std::string& new_option ); - +#include "sim/sc_option.hpp" // Data Access ============================================================== const int MAX_LEVEL = 100; @@ -1302,29 +1244,6 @@ struct iteration_data_entry_t // Simulation Setup ========================================================= -struct option_tuple_t -{ - std::string scope, name, value; - option_tuple_t( const std::string& s, const std::string& n, const std::string& v ) : scope( s ), name( n ), value( v ) {} -}; - -struct option_db_t : public std::vector -{ - std::vector auto_path; - std::unordered_map var_map; - - option_db_t(); - void add( const std::string& scope, const std::string& name, const std::string& value ) - { - push_back( option_tuple_t( scope, name, value ) ); - } - bool parse_file( FILE* file ); - void parse_token( const std::string& token ); - void parse_line( const std::string& line ); - void parse_text( const std::string& text ); - void parse_args( const std::vector& args ); -}; - struct player_description_t { // Add just enough to describe a player @@ -3627,7 +3546,7 @@ struct player_t : public actor_t action_priority_list_t* active_action_list; action_priority_list_t* active_off_gcd_list; action_priority_list_t* restore_action_list; - std::map alist_map; + std::unordered_map alist_map; std::string action_list_information; // comment displayed in profile bool no_action_list_provided; diff --git a/source_files/QT_engine.pri b/source_files/QT_engine.pri index ab08c019145..3cfcafb4429 100644 --- a/source_files/QT_engine.pri +++ b/source_files/QT_engine.pri @@ -12,6 +12,7 @@ HEADERS += engine/util/generic.hpp HEADERS += engine/util/concurrency.hpp HEADERS += engine/util/cache.hpp + HEADERS += engine/sim/sc_option.hpp HEADERS += engine/report/sc_report.hpp HEADERS += engine/dbc/specialization.hpp HEADERS += engine/dbc/dbc.hpp diff --git a/source_files/VS_engine.props b/source_files/VS_engine.props index fc20dda2264..9133d7e0be5 100644 --- a/source_files/VS_engine.props +++ b/source_files/VS_engine.props @@ -15,6 +15,7 @@ To change the list of source files, update the QT_ files and run synchronize.py + @@ -63,7 +64,7 @@ To change the list of source files, update the QT_ files and run synchronize.py - + NotUsing @@ -147,7 +148,7 @@ To change the list of source files, update the QT_ files and run synchronize.py - + NotUsing NotUsing diff --git a/source_files/engine_make b/source_files/engine_make index c30c42fa276..45d57eca6a0 100644 --- a/source_files/engine_make +++ b/source_files/engine_make @@ -12,6 +12,7 @@ SRC += \ util$(PATHSEP)generic.hpp \ util$(PATHSEP)concurrency.hpp \ util$(PATHSEP)cache.hpp \ + sim$(PATHSEP)sc_option.hpp \ report$(PATHSEP)sc_report.hpp \ dbc$(PATHSEP)specialization.hpp \ dbc$(PATHSEP)dbc.hpp \