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; |