1 //
2 // CDDL HEADER START
3 //
4 // The contents of this file are subject to the terms of the Common
5 // Development and Distribution License Version 1.0 (the "License").
6 //
7 // You can obtain a copy of the license at
8 // http://www.opensource.org/licenses/CDDL-1.0.  See the License for the
9 // specific language governing permissions and limitations under the License.
10 //
11 // When distributing Covered Code, include this CDDL HEADER in each file and
12 // include the License file in a prominent location with the name
13 // LICENSE.CDDL.
14 // If applicable, add the following below this CDDL HEADER, with the fields
15 // enclosed by brackets "[]" replaced with your own identifying information:
16 //
17 // Portions Copyright (c) [yyyy] [name of copyright owner].
18 // All rights reserved.
19 //
20 // CDDL HEADER END
21 //
22 
23 //
24 // Copyright (c) 2016--2020, Regents of the University of Minnesota.
25 // All rights reserved.
26 //
27 // Contributors:
28 //    Ryan S. Elliott
29 //
30 
31 //
32 // Release: This file is part of the kim-api-2.2.1 package.
33 //
34 
35 
36 #include <string>
37 
38 #ifndef KIM_SUPPORT_STATUS_HPP_
39 #include "KIM_SupportStatus.hpp"
40 #endif
41 extern "C" {
42 #ifndef KIM_SUPPORT_STATUS_H_
43 #include "KIM_SupportStatus.h"
44 #endif
45 }  // extern "C"
46 
47 namespace
48 {
makeSupportStatusCpp(KIM_SupportStatus const supportStatus)49 KIM::SupportStatus makeSupportStatusCpp(KIM_SupportStatus const supportStatus)
50 {
51   KIM::SupportStatus const * const supportStatusCpp
52       = reinterpret_cast<KIM::SupportStatus const *>(&supportStatus);
53   return *supportStatusCpp;
54 }
55 
makeSupportStatusC(KIM::SupportStatus const supportStatus)56 KIM_SupportStatus makeSupportStatusC(KIM::SupportStatus const supportStatus)
57 {
58   KIM_SupportStatus const * const supportStatusC
59       = reinterpret_cast<KIM_SupportStatus const *>(&supportStatus);
60   return *supportStatusC;
61 }
62 }  // namespace
63 
64 extern "C" {
KIM_SupportStatus_FromString(char const * const str)65 KIM_SupportStatus KIM_SupportStatus_FromString(char const * const str)
66 {
67   return makeSupportStatusC(KIM::SupportStatus(std::string(str)));
68 }
69 
KIM_SupportStatus_Known(KIM_SupportStatus const supportStatus)70 int KIM_SupportStatus_Known(KIM_SupportStatus const supportStatus)
71 {
72   return makeSupportStatusCpp(supportStatus).Known();
73 }
74 
KIM_SupportStatus_Equal(KIM_SupportStatus const lhs,KIM_SupportStatus const rhs)75 int KIM_SupportStatus_Equal(KIM_SupportStatus const lhs,
76                             KIM_SupportStatus const rhs)
77 {
78   return (lhs.supportStatusID == rhs.supportStatusID);
79 }
80 
KIM_SupportStatus_NotEqual(KIM_SupportStatus const lhs,KIM_SupportStatus const rhs)81 int KIM_SupportStatus_NotEqual(KIM_SupportStatus const lhs,
82                                KIM_SupportStatus const rhs)
83 {
84   return (!KIM_SupportStatus_Equal(lhs, rhs));
85 }
86 
KIM_SupportStatus_ToString(KIM_SupportStatus const supportStatus)87 char const * KIM_SupportStatus_ToString(KIM_SupportStatus const supportStatus)
88 {
89   return makeSupportStatusCpp(supportStatus).ToString().c_str();
90 }
91 
92 #include "KIM_SupportStatus.inc"
93 KIM_SupportStatus const KIM_SUPPORT_STATUS_requiredByAPI = {ID_requiredByAPI};
94 KIM_SupportStatus const KIM_SUPPORT_STATUS_notSupported = {ID_notSupported};
95 KIM_SupportStatus const KIM_SUPPORT_STATUS_required = {ID_required};
96 KIM_SupportStatus const KIM_SUPPORT_STATUS_optional = {ID_optional};
97 
KIM_SUPPORT_STATUS_GetNumberOfSupportStatuses(int * const numberOfSupportStatuses)98 void KIM_SUPPORT_STATUS_GetNumberOfSupportStatuses(
99     int * const numberOfSupportStatuses)
100 {
101   KIM::SUPPORT_STATUS::GetNumberOfSupportStatuses(numberOfSupportStatuses);
102 }
103 
KIM_SUPPORT_STATUS_GetSupportStatus(int const index,KIM_SupportStatus * const supportStatus)104 int KIM_SUPPORT_STATUS_GetSupportStatus(int const index,
105                                         KIM_SupportStatus * const supportStatus)
106 {
107   KIM::SupportStatus supportStatusCpp;
108   int error = KIM::SUPPORT_STATUS::GetSupportStatus(index, &supportStatusCpp);
109   if (error) return error;
110   *supportStatus = makeSupportStatusC(supportStatusCpp);
111   return false;
112 }
113 
114 }  // extern "C"
115