diff options
| -rw-r--r-- | backends/blif/blif.cc | 2 | ||||
| -rw-r--r-- | backends/btor/btor.cc | 2 | ||||
| -rw-r--r-- | kernel/log.cc | 2 | ||||
| -rw-r--r-- | kernel/rtlil.cc | 2 | ||||
| -rw-r--r-- | kernel/yosys.h | 11 | ||||
| -rw-r--r-- | passes/cmds/show.cc | 2 | 
6 files changed, 16 insertions, 5 deletions
| diff --git a/backends/blif/blif.cc b/backends/blif/blif.cc index c257e4964..af6f8726a 100644 --- a/backends/blif/blif.cc +++ b/backends/blif/blif.cc @@ -61,7 +61,7 @@ struct BlifDumper  	{  	} -	std::vector<std::string> cstr_buf; +	vector<shared_str> cstr_buf;  	const char *cstr(RTLIL::IdString id)  	{ diff --git a/backends/btor/btor.cc b/backends/btor/btor.cc index bcee505be..079a82a2f 100644 --- a/backends/btor/btor.cc +++ b/backends/btor/btor.cc @@ -155,7 +155,7 @@ struct BtorDumper  	} -	std::vector<std::string> cstr_buf; +	vector<shared_str> cstr_buf;  	const char *cstr(const RTLIL::IdString id)  	{ diff --git a/kernel/log.cc b/kernel/log.cc index dbc94ce8c..91d857723 100644 --- a/kernel/log.cc +++ b/kernel/log.cc @@ -52,7 +52,7 @@ string log_last_error;  vector<int> header_count;  pool<RTLIL::IdString> log_id_cache; -vector<string> string_buf; +vector<shared_str> string_buf;  int string_buf_index = -1;  static struct timeval initial_tv = { 0, 0 }; diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc index 373a3a5e6..5deef8507 100644 --- a/kernel/rtlil.cc +++ b/kernel/rtlil.cc @@ -147,7 +147,7 @@ RTLIL::Const RTLIL::Const::from_string(std::string str)  std::string RTLIL::Const::decode_string() const  {  	std::string string; -	std::vector <char> string_chars; +	std::vector<char> string_chars;  	for (int i = 0; i < int (bits.size()); i += 8) {  		char ch = 0;  		for (int j = 0; j < 8 && i + j < int (bits.size()); j++) diff --git a/kernel/yosys.h b/kernel/yosys.h index db8161c5d..14277ade8 100644 --- a/kernel/yosys.h +++ b/kernel/yosys.h @@ -140,6 +140,17 @@ using std::vector;  using std::string;  using std::pair; +// A primitive shared string implementation that does not +// move its .c_str() when the object is copied or moved. +struct shared_str { +	std::shared_ptr<string> content; +	shared_str() { } +	shared_str(string s) { content = std::shared_ptr<string>(new string(s)); } +	shared_str(const char *s) { content = std::shared_ptr<string>(new string(s)); } +	const char *c_str() { return content->c_str(); } +	const string &str() { return *content; } +}; +  using hashlib::mkhash;  using hashlib::mkhash_init;  using hashlib::mkhash_add; diff --git a/passes/cmds/show.cc b/passes/cmds/show.cc index 81321665c..0bcc76893 100644 --- a/passes/cmds/show.cc +++ b/passes/cmds/show.cc @@ -41,7 +41,7 @@ struct ShowWorker  {  	CellTypes ct; -	std::vector<std::string> dot_escape_store; +	vector<shared_str> dot_escape_store;  	std::map<RTLIL::IdString, int> dot_id2num_store;  	std::map<RTLIL::IdString, int> autonames;  	int single_idx_count; | 
