Chromium Code Reviews| Index: src/core/SkExchange.h |
| diff --git a/src/core/SkExchange.h b/src/core/SkExchange.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e482ab162e1e6af9e9bca67cc6e33a5c139308e0 |
| --- /dev/null |
| +++ b/src/core/SkExchange.h |
| @@ -0,0 +1,22 @@ |
| +/* |
| + * Copyright 2016 Google Inc. |
| + * |
| + * Use of this source code is governed by a BSD-style license that can be |
| + * found in the LICENSE file. |
| + */ |
| + |
| +#ifndef SkExchange_DEFINED |
| +#define SkExchange_DEFINED |
| + |
| +namespace skstd { |
| + |
| +// std::exchange is in C++14 |
| +template <typename T, typename U> inline T exchange(T& obj, U&& newValue) { |
|
mtklein_C
2016/09/29 18:11:02
Any idea why the standard does <typename T, typena
csmartdalton
2016/09/29 19:19:22
I think it's to avoid ambiguous overloads, e.g.:
mtklein_C
2016/09/29 19:36:39
Generally we make all methods declared in headers
|
| + T oldValue(obj); |
|
mtklein_C
2016/09/29 18:11:02
Shouldn't we std::move obj?
csmartdalton
2016/09/29 19:19:22
Done.
|
| + obj = newValue; |
|
mtklein_C
2016/09/29 18:11:02
and std::forward newValue?
csmartdalton
2016/09/29 19:19:22
Done.
|
| + return oldValue; |
| +} |
| + |
| +} |
| + |
| +#endif // SkExchange_DEFINED |