using C++17 emplace return type
This commit is contained in:
parent
fe185e382b
commit
81d667dbd7
@ -220,14 +220,14 @@
|
||||
#endif
|
||||
|
||||
#undef _nana_std_has_string_view
|
||||
#undef _nana_std_has_returnable_emplace_back
|
||||
#undef _nana_std_has_emplace_return_type
|
||||
#if ((defined(_MSC_VER) && (_MSC_VER >= 1912) && defined(_MSVC_LANG) && _MSVC_LANG >= 201703)) || \
|
||||
((__cplusplus >= 201703L) && \
|
||||
(defined(__clang__) && (__clang_major__ * 100 + __clang_minor__ >= 400) || \
|
||||
(!defined(__clang__) && defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 701))) \
|
||||
)
|
||||
# define _nana_std_has_string_view
|
||||
# define _nana_std_has_returnable_emplace_back
|
||||
# define _nana_std_has_emplace_return_type
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@ -186,10 +186,12 @@ namespace nana
|
||||
throw std::invalid_argument(excpt_what);
|
||||
|
||||
std::vector<std::string> rgb;
|
||||
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
auto const is_real = (rgb.emplace_back(i->str()).back() == '%');
|
||||
#else
|
||||
rgb.emplace_back(i->str());
|
||||
|
||||
const bool is_real = (rgb.back().back() == '%');
|
||||
#endif
|
||||
pat.assign(is_real ? "(\\d*\\.)?\\d+\\%" : "\\d+");
|
||||
|
||||
for (++i; i != end; ++i)
|
||||
@ -275,9 +277,13 @@ namespace nana
|
||||
{
|
||||
std::vector<std::string> rgb;
|
||||
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
auto const is_real = (rgb.emplace_back(std::move(str)).back() == '%');
|
||||
#else
|
||||
rgb.emplace_back(std::move(str));
|
||||
|
||||
const bool is_real = (rgb.back().back() == '%');
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < 2; ++i)
|
||||
{
|
||||
|
||||
@ -85,8 +85,12 @@ namespace nana
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
auto & rep = impl_->base.emplace_back();
|
||||
#else
|
||||
impl_->base.emplace_back();
|
||||
auto & rep = impl_->base.back();
|
||||
#endif
|
||||
rep.handle = wd;
|
||||
rep.keys.emplace_back(key);
|
||||
|
||||
@ -242,8 +246,12 @@ namespace detail
|
||||
return kv.second;
|
||||
}
|
||||
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
return table_.emplace_back(key).second;
|
||||
#else
|
||||
table_.emplace_back(key);
|
||||
return table_.back().second;
|
||||
#endif
|
||||
}
|
||||
|
||||
iterator find(const Key& key)
|
||||
|
||||
@ -742,8 +742,14 @@ namespace nana
|
||||
|
||||
void _m_add_agent(const detail::place_agent& ag) override
|
||||
{
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
this->operator<<(
|
||||
widgets_.emplace_back(ag.create(place_ptr_->window_handle()))->handle()
|
||||
);
|
||||
#else
|
||||
widgets_.emplace_back(ag.create(place_ptr_->window_handle()));
|
||||
this->operator<<(widgets_.back()->handle());
|
||||
#endif
|
||||
}
|
||||
public:
|
||||
division* attached{ nullptr };
|
||||
|
||||
@ -436,10 +436,13 @@ namespace nana
|
||||
caption_.caption(wdg->caption());
|
||||
}
|
||||
|
||||
panels_.emplace_back();
|
||||
auto wdg_ptr = wdg.get();
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
panels_.emplace_back().widget_ptr = std::move(wdg);
|
||||
#else
|
||||
panels_.emplace_back();
|
||||
panels_.back().widget_ptr.swap(wdg);
|
||||
|
||||
#endif
|
||||
for (auto & pn : panels_)
|
||||
{
|
||||
if (pn.widget_ptr)
|
||||
|
||||
@ -136,8 +136,12 @@ namespace nana{
|
||||
{
|
||||
_THROW_IF_EMPTY()
|
||||
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
auto & opt = impl_->options.emplace_back(new checkbox{ handle() });
|
||||
#else
|
||||
impl_->options.emplace_back(new checkbox(handle()));
|
||||
auto & opt = impl_->options.back();
|
||||
#endif
|
||||
opt->transparent(true);
|
||||
opt->caption(std::move(text));
|
||||
impl_->place_content[field_options] << *opt;
|
||||
|
||||
@ -226,8 +226,12 @@ namespace nana
|
||||
{
|
||||
if(fbp->target.size() || fbp->url.size())
|
||||
{
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
auto & tr = traceable_.emplace_back();
|
||||
#else
|
||||
traceable_.emplace_back();
|
||||
auto & tr = traceable_.back();
|
||||
#endif
|
||||
tr.r.x = x;
|
||||
tr.r.y = y;
|
||||
tr.r.dimension(sz);
|
||||
@ -398,7 +402,7 @@ namespace nana
|
||||
//make a visual line for existing vsline elements
|
||||
if (text_pos)
|
||||
{
|
||||
#ifdef _nana_std_has_returnable_emplace_back
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
auto & vsline = rs.vslines.emplace_back();
|
||||
#else
|
||||
rs.vslines.emplace_back();
|
||||
@ -449,7 +453,7 @@ namespace nana
|
||||
if (text_begin + sub_text_len < data->text().size())
|
||||
{
|
||||
//make a new visual line
|
||||
#ifdef _nana_std_has_returnable_emplace_back
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
auto & vsline = rs.vslines.emplace_back();
|
||||
#else
|
||||
rs.vslines.emplace_back();
|
||||
@ -483,7 +487,7 @@ namespace nana
|
||||
|
||||
if (!vsline_elements.empty())
|
||||
{
|
||||
#ifdef _nana_std_has_returnable_emplace_back
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
auto & vsline = rs.vslines.emplace_back();
|
||||
#else
|
||||
rs.vslines.emplace_back();
|
||||
@ -515,14 +519,14 @@ namespace nana
|
||||
#endif
|
||||
|
||||
text_px = 0;
|
||||
for (std::size_t i = 0; i < text.size(); ++i)
|
||||
for (unsigned i = 0; i < text.size(); ++i)
|
||||
{
|
||||
if (text_px + pxbuf[i] > limited_width_px)
|
||||
return i;
|
||||
|
||||
text_px += pxbuf[i];
|
||||
}
|
||||
return text.size();
|
||||
return static_cast<unsigned>(text.size());
|
||||
}
|
||||
|
||||
bool _m_foreach_visual_line(graph_reference graph, render_status& rs)
|
||||
@ -542,7 +546,7 @@ namespace nana
|
||||
}
|
||||
|
||||
++rs.index; //next line index
|
||||
rs.pos.y += vsline.extent_height_px;
|
||||
rs.pos.y += static_cast<int>(vsline.extent_height_px);
|
||||
|
||||
if (rs.pos.y > bottom)
|
||||
return false;
|
||||
|
||||
@ -312,8 +312,12 @@ namespace nana
|
||||
|
||||
size_type create(essence* ess, native_string_type&& text, unsigned pixels)
|
||||
{
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
return cont_.emplace_back(ess, std::move(text), pixels, static_cast<size_type>(cont_.size())).index;
|
||||
#else
|
||||
cont_.emplace_back(ess, std::move(text), pixels, static_cast<size_type>(cont_.size()));
|
||||
return cont_.back().index;
|
||||
#endif
|
||||
}
|
||||
|
||||
void clear()
|
||||
@ -1023,9 +1027,15 @@ namespace nana
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
auto & last_cat = categories_.emplace_back();
|
||||
last_cat.key_ptr = ptr;
|
||||
return &last_cat;
|
||||
#else
|
||||
categories_.emplace_back();
|
||||
categories_.back().key_ptr = ptr;
|
||||
return &(categories_.back());
|
||||
#endif
|
||||
}
|
||||
|
||||
/// Inserts a new category at position specified by pos
|
||||
@ -1033,8 +1043,12 @@ namespace nana
|
||||
{
|
||||
if (::nana::npos == pos)
|
||||
{
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
return &categories_.emplace_back(std::move(text));
|
||||
#else
|
||||
categories_.emplace_back(std::move(text));
|
||||
return &categories_.back();
|
||||
#endif
|
||||
}
|
||||
|
||||
return &(*categories_.emplace(this->get(pos), std::move(text)));
|
||||
@ -2622,8 +2636,12 @@ namespace nana
|
||||
|
||||
oresolver& oresolver::operator<<(std::nullptr_t)
|
||||
{
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
cells_.emplace_back().text.assign(1, wchar_t{});
|
||||
#else
|
||||
cells_.emplace_back();
|
||||
cells_.back().text.assign(1, wchar_t(0)); //means invalid cell
|
||||
#endif
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
@ -89,11 +89,18 @@ namespace nana
|
||||
|
||||
if (shortkey && shortkey < 0x61)
|
||||
shortkey += (0x61 - 0x41);
|
||||
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
auto & last = items.emplace_back(new item_type{std::move(transformed_text), shortkey, shortkey_pos});
|
||||
API::refresh_window(*widget_ptr);
|
||||
return last->menu_obj;
|
||||
#else
|
||||
items.emplace_back(new item_type{ std::move(transformed_text), shortkey, shortkey_pos });
|
||||
|
||||
API::refresh_window(*widget_ptr);
|
||||
|
||||
return this->items.back()->menu_obj;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool cancel()
|
||||
|
||||
@ -1009,8 +1009,12 @@ namespace nana{ namespace widgets
|
||||
auto ki = keywords.schemes.find(ds.scheme);
|
||||
if ((ki != keywords.schemes.end()) && ki->second)
|
||||
{
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
auto & last = entities.emplace_back();
|
||||
#else
|
||||
entities.emplace_back();
|
||||
auto & last = entities.back();
|
||||
#endif
|
||||
last.begin = c_str + pos;
|
||||
last.end = last.begin + ds.text.size();
|
||||
last.scheme = ki->second.get();
|
||||
|
||||
@ -750,8 +750,8 @@ namespace nana
|
||||
{
|
||||
if((pos == npos) || (pos >= list_.size()))
|
||||
{
|
||||
pos = list_.size();
|
||||
this->list_.emplace_back();
|
||||
pos = list_.size() - 1;
|
||||
}
|
||||
else
|
||||
list_.emplace(iterator_at(pos));
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
#include <nana/unicode_bidi.hpp>
|
||||
#include <nana/c++defines.hpp>
|
||||
|
||||
namespace nana
|
||||
{
|
||||
@ -611,8 +612,12 @@ namespace nana
|
||||
|
||||
void unicode_bidi::_m_push_entity(const char_type * begin, const char_type *end, unsigned level, bidi_char bidi_char_type)
|
||||
{
|
||||
#ifdef _nana_std_has_emplace_return_type
|
||||
auto & e = levels_.emplace_back();
|
||||
#else
|
||||
levels_.emplace_back();
|
||||
auto & e = levels_.back();
|
||||
#endif
|
||||
e.begin = begin;
|
||||
e.end = end;
|
||||
e.level = level;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user