mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-21 17:51:03 +00:00
Avoid copying vector needlessly
The getLabel method will not consider more than 10 citation keys. Instead of removing elements from the keys vector, this commit adapts the for loop to skip unwanted elements. This allows to pass the keys vector by const reference. Spotted by Coverity scan.
This commit is contained in:
parent
4af7cb045c
commit
69d8435a7f
@ -1393,32 +1393,28 @@ docstring const BiblioInfo::getInfo(docstring const & key,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
docstring const BiblioInfo::getLabel(vector<docstring> keys,
|
docstring const BiblioInfo::getLabel(vector<docstring> const & keys,
|
||||||
Buffer const & buf, string const & style, CiteItem const & ci) const
|
Buffer const & buf, string const & style, CiteItem const & ci) const
|
||||||
{
|
{
|
||||||
size_t max_size = ci.max_size;
|
size_t max_size = ci.max_size;
|
||||||
// shorter makes no sense
|
// shorter makes no sense
|
||||||
LASSERT(max_size >= 16, max_size = 16);
|
LASSERT(max_size >= 16, max_size = 16);
|
||||||
|
|
||||||
// we can't display more than 10 of these, anyway
|
|
||||||
// but since we truncate in the middle,
|
|
||||||
// we need to split into two halfs.
|
|
||||||
bool const too_many_keys = keys.size() > 10;
|
|
||||||
vector<docstring> lkeys;
|
|
||||||
if (too_many_keys) {
|
|
||||||
lkeys.insert(lkeys.end(), keys.end() - 5, keys.end());
|
|
||||||
keys.resize(5);
|
|
||||||
keys.insert(keys.end(), lkeys.begin(), lkeys.end());
|
|
||||||
}
|
|
||||||
|
|
||||||
CiteEngineType const engine_type = buf.params().citeEngineType();
|
CiteEngineType const engine_type = buf.params().citeEngineType();
|
||||||
DocumentClass const & dc = buf.params().documentClass();
|
DocumentClass const & dc = buf.params().documentClass();
|
||||||
docstring const & format = from_utf8(dc.getCiteFormat(engine_type, style, false, "cite"));
|
docstring const & format = from_utf8(dc.getCiteFormat(engine_type, style, false, "cite"));
|
||||||
docstring ret = format;
|
docstring ret = format;
|
||||||
vector<docstring>::const_iterator key = keys.begin();
|
auto key = keys.begin();
|
||||||
vector<docstring>::const_iterator ken = keys.end();
|
auto const ken = keys.end();
|
||||||
vector<docstring> handled_keys;
|
vector<docstring> handled_keys;
|
||||||
for (int i = 0; key != ken; ++key, ++i) {
|
for (int i = 0; key != ken; ++key, ++i) {
|
||||||
|
// we can't display more than 10 keys anyway, so keep 5 from
|
||||||
|
// the start and 5 from the end.
|
||||||
|
if (i == 5 && keys.size() > 10) {
|
||||||
|
i = keys.size() - 5;
|
||||||
|
key = ken - 5;
|
||||||
|
}
|
||||||
|
|
||||||
handled_keys.push_back(*key);
|
handled_keys.push_back(*key);
|
||||||
int n = 0;
|
int n = 0;
|
||||||
for (auto const & k : handled_keys) {
|
for (auto const & k : handled_keys) {
|
||||||
|
@ -241,7 +241,7 @@ public:
|
|||||||
bool const for_xhtml = false) const;
|
bool const for_xhtml = false) const;
|
||||||
/// \return formatted BibTeX data for citation labels.
|
/// \return formatted BibTeX data for citation labels.
|
||||||
/// Citation labels can have more than one key.
|
/// Citation labels can have more than one key.
|
||||||
docstring const getLabel(std::vector<docstring> keys, Buffer const & buf,
|
docstring const getLabel(std::vector<docstring> const & keys, Buffer const & buf,
|
||||||
std::string const & style, CiteItem const & ci) const;
|
std::string const & style, CiteItem const & ci) const;
|
||||||
/// Is this a reference from a bibtex database
|
/// Is this a reference from a bibtex database
|
||||||
/// or from a bibliography environment?
|
/// or from a bibliography environment?
|
||||||
|
Loading…
Reference in New Issue
Block a user