2017
[folly.git] / folly / detail / UncaughtExceptionCounter.h
1 /*
2  * Copyright 2017 Facebook, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #pragma once
18
19 #include <exception>
20
21 #include <folly/UncaughtExceptions.h>
22
23 namespace folly { namespace detail {
24
25 /**
26  * Used to check if a new uncaught exception was thrown by monitoring the
27  * number of uncaught exceptions.
28  *
29  * Usage:
30  *  - create a new UncaughtExceptionCounter object
31  *  - call isNewUncaughtException() on the new object to check if a new
32  *    uncaught exception was thrown since the object was created
33  */
34 class UncaughtExceptionCounter {
35  public:
36   UncaughtExceptionCounter() noexcept
37       : exceptionCount_(folly::uncaught_exceptions()) {}
38
39   UncaughtExceptionCounter(const UncaughtExceptionCounter& other) noexcept
40       : exceptionCount_(other.exceptionCount_) {}
41
42   bool isNewUncaughtException() noexcept {
43     return folly::uncaught_exceptions() > exceptionCount_;
44   }
45
46  private:
47   int exceptionCount_;
48 };
49
50 }} // namespaces