/*
- * Copyright 2014 Facebook, Inc.
+ * Copyright 2017 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#ifndef FOLLY_LAZY_H_
-#define FOLLY_LAZY_H_
-#include <utility>
+#pragma once
+
#include <type_traits>
+#include <utility>
-#include "folly/Optional.h"
+#include <folly/Optional.h>
namespace folly {
namespace detail {
-template<class Func>
+template <class Func>
struct Lazy {
typedef typename std::result_of<Func()>::type result_type;
}
result_type& operator()() {
- if (!value_) value_ = func_();
+ if (!value_) {
+ value_ = func_();
+ }
return *value_;
}
-private:
+ private:
Optional<result_type> value_;
Func func_;
};
-}
+} // namespace detail
//////////////////////////////////////////////////////////////////////
-template<class Func>
+template <class Func>
detail::Lazy<typename std::remove_reference<Func>::type>
lazy(Func&& fun) {
return detail::Lazy<typename std::remove_reference<Func>::type>(
//////////////////////////////////////////////////////////////////////
-}
-
-#endif
+} // namespace folly