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