Skip to content

Commit f7914be

Browse files
committed
DiscreteSample() の戻り値のコピーを回避
1 parent dc772d4 commit f7914be

File tree

2 files changed

+12
-12
lines changed

2 files changed

+12
-12
lines changed

Siv3D/include/Siv3D/DiscreteDistribution.hpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -76,27 +76,27 @@ namespace s3d
7676

7777
template <class Iterator, class URBG>
7878
[[nodiscard]]
79-
inline auto DiscreteSample(Iterator begin, Iterator end, DiscreteDistribution& weight, URBG&& urbg);
79+
inline decltype(auto) DiscreteSample(Iterator begin, Iterator end, DiscreteDistribution& weight, URBG&& urbg);
8080

8181
template <class Iterator>
8282
[[nodiscard]]
83-
inline auto DiscreteSample(Iterator begin, Iterator end, DiscreteDistribution& weight);
83+
inline decltype(auto) DiscreteSample(Iterator begin, Iterator end, DiscreteDistribution& weight);
8484

8585
template <class Container, class URBG>
8686
[[nodiscard]]
87-
inline auto DiscreteSample(const Container& c, DiscreteDistribution& weight, URBG&& urbg);
87+
inline decltype(auto) DiscreteSample(const Container& c, DiscreteDistribution& weight, URBG&& urbg);
8888

8989
template <class Container>
9090
[[nodiscard]]
91-
inline auto DiscreteSample(const Container& c, DiscreteDistribution& weight);
91+
inline decltype(auto) DiscreteSample(const Container& c, DiscreteDistribution& weight);
9292

9393
template <class Type, class URBG>
9494
[[nodiscard]]
95-
inline auto DiscreteSample(std::initializer_list<Type> ilist, DiscreteDistribution& weight, URBG&& urbg);
95+
inline decltype(auto) DiscreteSample(std::initializer_list<Type> ilist, DiscreteDistribution& weight, URBG&& urbg);
9696

9797
template <class Type>
9898
[[nodiscard]]
99-
inline auto DiscreteSample(std::initializer_list<Type> ilist, DiscreteDistribution& weight);
99+
inline decltype(auto) DiscreteSample(std::initializer_list<Type> ilist, DiscreteDistribution& weight);
100100
}
101101

102102
# include "detail/DiscreteDistribution.ipp"

Siv3D/include/Siv3D/detail/DiscreteDistribution.ipp

+6-6
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ namespace s3d
7373
}
7474

7575
template <class Iterator, class URBG>
76-
inline auto DiscreteSample(Iterator begin, [[maybe_unused]] Iterator end, DiscreteDistribution& weight, URBG&& urbg)
76+
inline decltype(auto) DiscreteSample(Iterator begin, [[maybe_unused]] Iterator end, DiscreteDistribution& weight, URBG&& urbg)
7777
{
7878
assert(begin != end);
7979
assert(std::distance(begin, end) == static_cast<int64>(weight.size()));
@@ -83,13 +83,13 @@ namespace s3d
8383
}
8484

8585
template <class Iterator>
86-
inline auto DiscreteSample(Iterator begin, Iterator end, DiscreteDistribution& weight)
86+
inline decltype(auto) DiscreteSample(Iterator begin, Iterator end, DiscreteDistribution& weight)
8787
{
8888
return DiscreteSample(begin, end, weight, GetDefaultRNG());
8989
}
9090

9191
template <class Container, class URBG>
92-
inline auto DiscreteSample(const Container& c, DiscreteDistribution& weight, URBG&& urbg)
92+
inline decltype(auto) DiscreteSample(const Container& c, DiscreteDistribution& weight, URBG&& urbg)
9393
{
9494
assert(std::size(c) != 0);
9595
assert(std::size(c) == weight.size());
@@ -100,20 +100,20 @@ namespace s3d
100100
}
101101

102102
template <class Container>
103-
inline auto DiscreteSample(const Container& c, DiscreteDistribution& weight)
103+
inline decltype(auto) DiscreteSample(const Container& c, DiscreteDistribution& weight)
104104
{
105105
return DiscreteSample(c, weight, GetDefaultRNG());
106106
}
107107

108108
template <class Type, class URBG>
109-
inline auto DiscreteSample(std::initializer_list<Type> ilist, DiscreteDistribution& weight, URBG&& urbg)
109+
inline decltype(auto) DiscreteSample(std::initializer_list<Type> ilist, DiscreteDistribution& weight, URBG&& urbg)
110110
{
111111
assert(ilist.size() != 0);
112112
return *(ilist.begin() + weight(std::forward<URBG>(urbg)));
113113
}
114114

115115
template <class Type>
116-
inline auto DiscreteSample(std::initializer_list<Type> ilist, DiscreteDistribution& weight)
116+
inline decltype(auto) DiscreteSample(std::initializer_list<Type> ilist, DiscreteDistribution& weight)
117117
{
118118
return DiscreteSample(ilist, weight, GetDefaultRNG());
119119
}

0 commit comments

Comments
 (0)