folly: ExceptionWrapper: remove <iostream> from header
authorLucian Grijincu <lucian@fb.com>
Thu, 17 Nov 2016 19:06:36 +0000 (11:06 -0800)
committerFacebook Github Bot <facebook-github-bot-bot@fb.com>
Thu, 17 Nov 2016 19:09:14 +0000 (11:09 -0800)
Summary: #accept2ship

Reviewed By: yfeldblum

Differential Revision: D4192095

fbshipit-source-id: eb0cad875bcc24d1c87a99890c51aea31f7024c9

folly/ExceptionWrapper.cpp [new file with mode: 0644]
folly/ExceptionWrapper.h
folly/Makefile.am

diff --git a/folly/ExceptionWrapper.cpp b/folly/ExceptionWrapper.cpp
new file mode 100644 (file)
index 0000000..3beb92e
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2016 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <folly/ExceptionWrapper.h>
+
+#include <exception>
+#include <iostream>
+
+namespace folly {
+
+[[noreturn]] void exception_wrapper::throwException() const {
+  if (throwfn_) {
+    throwfn_(item_.get());
+  } else if (eptr_) {
+    std::rethrow_exception(eptr_);
+  }
+  std::cerr
+      << "Cannot use `throwException` with an empty folly::exception_wrapper"
+      << std::endl;
+  std::terminate();
+}
+
+fbstring exception_wrapper::class_name() const {
+  if (item_) {
+    auto& i = *item_;
+    return demangle(typeid(i));
+  } else if (eptr_) {
+    return ename_;
+  } else {
+    return fbstring();
+  }
+}
+
+fbstring exception_wrapper::what() const {
+  if (item_) {
+    return exceptionStr(*item_);
+  } else if (eptr_) {
+    return estr_;
+  } else {
+    return fbstring();
+  }
+}
+
+fbstring exceptionStr(const exception_wrapper& ew) {
+  return ew.what();
+}
+
+} // folly
index df40f040367efb85e37dcd56cae294c45d564a85..a44d3dd790206523a10f39a88964294dfcae379d 100644 (file)
 
 #pragma once
 
-#include <cassert>
 #include <exception>
-#include <iostream>
 #include <memory>
+#include <string>
+#include <type_traits>
+#include <utility>
+
 #include <folly/ExceptionString.h>
+#include <folly/FBString.h>
 #include <folly/detail/ExceptionWrapper.h>
 
 namespace folly {
@@ -151,17 +154,7 @@ class exception_wrapper {
 
   // If the exception_wrapper does not contain an exception, std::terminate()
   // is invoked to assure the [[noreturn]] behaviour.
-  [[noreturn]] void throwException() const {
-    if (throwfn_) {
-      throwfn_(item_.get());
-    } else if (eptr_) {
-      std::rethrow_exception(eptr_);
-    }
-    std::cerr
-        << "Cannot use `throwException` with an empty folly::exception_wrapper"
-        << std::endl;
-    std::terminate();
-  }
+  [[noreturn]] void throwException() const;
 
   explicit operator bool() const {
     return item_ || eptr_;
@@ -191,26 +184,8 @@ class exception_wrapper {
   std::exception* getCopied() { return item_.get(); }
   const std::exception* getCopied() const { return item_.get(); }
 
-  fbstring what() const {
-    if (item_) {
-      return exceptionStr(*item_);
-    } else if (eptr_) {
-      return estr_;
-    } else {
-      return fbstring();
-    }
-  }
-
-  fbstring class_name() const {
-    if (item_) {
-      auto& i = *item_;
-      return demangle(typeid(i));
-    } else if (eptr_) {
-      return ename_;
-    } else {
-      return fbstring();
-    }
-  }
+  fbstring what() const;
+  fbstring class_name() const;
 
   template <class Ex>
   bool is_compatible_with() const {
@@ -378,9 +353,7 @@ exception_wrapper make_exception_wrapper(Args&&... args) {
 }
 
 // For consistency with exceptionStr() functions in String.h
-inline fbstring exceptionStr(const exception_wrapper& ew) {
-  return ew.what();
-}
+fbstring exceptionStr(const exception_wrapper& ew);
 
 /*
  * try_and_catch is a simple replacement for try {} catch(){} that allows you to
@@ -477,4 +450,5 @@ class try_and_catch<> : public exception_wrapper {
     fn();
   }
 };
-}
+
+} // folly
index c965a587ddeaff4cb972150336cb7f30c53f59c3..ba3409b6ad05b63a8e19d353a1b7a5d6135c7c85 100644 (file)
@@ -409,6 +409,7 @@ libfolly_la_SOURCES = \
        detail/CacheLocality.cpp \
        detail/IPAddress.cpp \
        dynamic.cpp \
+       ExceptionWrapper.cpp \
        File.cpp \
        FileUtil.cpp \
        FingerprintTables.cpp \