1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements.  See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership.  The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License.  You may obtain a copy of the License at
9  *
10  *   http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied.  See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 
20 /*!
21  * \file runtime_base.h
22  * \brief Base of all C APIs
23  */
24 #ifndef TVM_RUNTIME_RUNTIME_BASE_H_
25 #define TVM_RUNTIME_RUNTIME_BASE_H_
26 
27 #include <tvm/runtime/c_runtime_api.h>
28 #include <stdexcept>
29 
30 /*! \brief  macro to guard beginning and end section of all functions */
31 #define API_BEGIN() try {
32 /*! \brief every function starts with API_BEGIN();
33      and finishes with API_END() or API_END_HANDLE_ERROR */
34 #define API_END() } catch(std::runtime_error &_except_) { return TVMAPIHandleException(_except_); } return 0;  // NOLINT(*)
35 /*!
36  * \brief every function starts with API_BEGIN();
37  *   and finishes with API_END() or API_END_HANDLE_ERROR
38  *   The finally clause contains procedure to cleanup states when an error happens.
39  */
40 #define API_END_HANDLE_ERROR(Finalize) } catch(std::runtime_error &_except_) { Finalize; return TVMAPIHandleException(_except_); } return 0; // NOLINT(*)
41 
42 /*!
43  * \brief handle exception throwed out
44  * \param e the exception
45  * \return the return value of API after exception is handled
46  */
47 int TVMAPIHandleException(const std::runtime_error &e);
48 
49 #endif  // TVM_RUNTIME_RUNTIME_BASE_H_
50