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_SPECIES_NAME_HPP_
39 #include "KIM_SpeciesName.hpp"
40 #endif
41 extern "C" {
42 #ifndef KIM_SPECIES_NAME_H_
43 #include "KIM_SpeciesName.h"
44 #endif
45 }  // extern "C"
46 
47 namespace
48 {
makeSpeciesNameCpp(KIM_SpeciesName const speciesName)49 KIM::SpeciesName makeSpeciesNameCpp(KIM_SpeciesName const speciesName)
50 {
51   KIM::SpeciesName const * const speciesNameCpp
52       = reinterpret_cast<KIM::SpeciesName const *>(&speciesName);
53   return *speciesNameCpp;
54 }
55 
makeSpeciesNameC(KIM::SpeciesName speciesName)56 KIM_SpeciesName makeSpeciesNameC(KIM::SpeciesName speciesName)
57 {
58   KIM_SpeciesName const * const speciesNameC
59       = reinterpret_cast<KIM_SpeciesName const *>(&speciesName);
60   return *speciesNameC;
61 }
62 }  // namespace
63 
64 extern "C" {
KIM_SpeciesName_FromString(char const * const str)65 KIM_SpeciesName KIM_SpeciesName_FromString(char const * const str)
66 {
67   return makeSpeciesNameC(KIM::SpeciesName(std::string(str)));
68 }
69 
KIM_SpeciesName_Known(KIM_SpeciesName const speciesName)70 int KIM_SpeciesName_Known(KIM_SpeciesName const speciesName)
71 {
72   return makeSpeciesNameCpp(speciesName).Known();
73 }
74 
KIM_SpeciesName_Equal(KIM_SpeciesName const lhs,KIM_SpeciesName const rhs)75 int KIM_SpeciesName_Equal(KIM_SpeciesName const lhs, KIM_SpeciesName const rhs)
76 {
77   return (lhs.speciesNameID == rhs.speciesNameID);
78 }
79 
KIM_SpeciesName_NotEqual(KIM_SpeciesName const lhs,KIM_SpeciesName const rhs)80 int KIM_SpeciesName_NotEqual(KIM_SpeciesName const lhs,
81                              KIM_SpeciesName const rhs)
82 {
83   return (!KIM_SpeciesName_Equal(lhs, rhs));
84 }
85 
KIM_SpeciesName_ToString(KIM_SpeciesName const speciesName)86 char const * KIM_SpeciesName_ToString(KIM_SpeciesName const speciesName)
87 {
88   return makeSpeciesNameCpp(speciesName).ToString().c_str();
89 }
90 
91 
92 #include "KIM_SpeciesName.inc"
93 KIM_SpeciesName const KIM_SPECIES_NAME_electron = {ID_electron};  // electron
94 KIM_SpeciesName const KIM_SPECIES_NAME_H = {ID_H};  // Hydrogen
95 KIM_SpeciesName const KIM_SPECIES_NAME_He = {ID_He};  // Helium
96 KIM_SpeciesName const KIM_SPECIES_NAME_Li = {ID_Li};  // Lithium
97 KIM_SpeciesName const KIM_SPECIES_NAME_Be = {ID_Be};  // Beryllium
98 KIM_SpeciesName const KIM_SPECIES_NAME_B = {ID_B};  // Boron
99 KIM_SpeciesName const KIM_SPECIES_NAME_C = {ID_C};  // Carbon
100 KIM_SpeciesName const KIM_SPECIES_NAME_N = {ID_N};  // Nitrogen
101 KIM_SpeciesName const KIM_SPECIES_NAME_O = {ID_O};  // Oxygen
102 KIM_SpeciesName const KIM_SPECIES_NAME_F = {ID_F};  // Fluorine
103 KIM_SpeciesName const KIM_SPECIES_NAME_Ne = {ID_Ne};  // Neon
104 KIM_SpeciesName const KIM_SPECIES_NAME_Na = {ID_Na};  // Sodium
105 KIM_SpeciesName const KIM_SPECIES_NAME_Mg = {ID_Mg};  // Magnesium
106 KIM_SpeciesName const KIM_SPECIES_NAME_Al = {ID_Al};  // Aluminum
107 KIM_SpeciesName const KIM_SPECIES_NAME_Si = {ID_Si};  // Silicon
108 KIM_SpeciesName const KIM_SPECIES_NAME_P = {ID_P};  // Phosphorus
109 KIM_SpeciesName const KIM_SPECIES_NAME_S = {ID_S};  // Sulfur
110 KIM_SpeciesName const KIM_SPECIES_NAME_Cl = {ID_Cl};  // Chlorine
111 KIM_SpeciesName const KIM_SPECIES_NAME_Ar = {ID_Ar};  // Argon
112 KIM_SpeciesName const KIM_SPECIES_NAME_K = {ID_K};  // Potassium
113 KIM_SpeciesName const KIM_SPECIES_NAME_Ca = {ID_Ca};  // Calcium
114 KIM_SpeciesName const KIM_SPECIES_NAME_Sc = {ID_Sc};  // Scandium
115 KIM_SpeciesName const KIM_SPECIES_NAME_Ti = {ID_Ti};  // Titanium
116 KIM_SpeciesName const KIM_SPECIES_NAME_V = {ID_V};  // Vanadium
117 KIM_SpeciesName const KIM_SPECIES_NAME_Cr = {ID_Cr};  // Chromium
118 KIM_SpeciesName const KIM_SPECIES_NAME_Mn = {ID_Mn};  // Manganese
119 KIM_SpeciesName const KIM_SPECIES_NAME_Fe = {ID_Fe};  // Iron
120 KIM_SpeciesName const KIM_SPECIES_NAME_Co = {ID_Co};  // Cobalt
121 KIM_SpeciesName const KIM_SPECIES_NAME_Ni = {ID_Ni};  // Nickel
122 KIM_SpeciesName const KIM_SPECIES_NAME_Cu = {ID_Cu};  // Copper
123 KIM_SpeciesName const KIM_SPECIES_NAME_Zn = {ID_Zn};  // Zinc
124 KIM_SpeciesName const KIM_SPECIES_NAME_Ga = {ID_Ga};  // Gallium
125 KIM_SpeciesName const KIM_SPECIES_NAME_Ge = {ID_Ge};  // Germanium
126 KIM_SpeciesName const KIM_SPECIES_NAME_As = {ID_As};  // Arsenic
127 KIM_SpeciesName const KIM_SPECIES_NAME_Se = {ID_Se};  // Selenium
128 KIM_SpeciesName const KIM_SPECIES_NAME_Br = {ID_Br};  // Bromine
129 KIM_SpeciesName const KIM_SPECIES_NAME_Kr = {ID_Kr};  // Krypton
130 KIM_SpeciesName const KIM_SPECIES_NAME_Rb = {ID_Rb};  // Rubidium
131 KIM_SpeciesName const KIM_SPECIES_NAME_Sr = {ID_Sr};  // Strontium
132 KIM_SpeciesName const KIM_SPECIES_NAME_Y = {ID_Y};  // Yttrium
133 KIM_SpeciesName const KIM_SPECIES_NAME_Zr = {ID_Zr};  // Zirconium
134 KIM_SpeciesName const KIM_SPECIES_NAME_Nb = {ID_Nb};  // Niobium
135 KIM_SpeciesName const KIM_SPECIES_NAME_Mo = {ID_Mo};  // Molybdenum
136 KIM_SpeciesName const KIM_SPECIES_NAME_Tc = {ID_Tc};  // Technetium
137 KIM_SpeciesName const KIM_SPECIES_NAME_Ru = {ID_Ru};  // Ruthenium
138 KIM_SpeciesName const KIM_SPECIES_NAME_Rh = {ID_Rh};  // Rhodium
139 KIM_SpeciesName const KIM_SPECIES_NAME_Pd = {ID_Pd};  // Palladium
140 KIM_SpeciesName const KIM_SPECIES_NAME_Ag = {ID_Ag};  // Silver
141 KIM_SpeciesName const KIM_SPECIES_NAME_Cd = {ID_Cd};  // Cadmium
142 KIM_SpeciesName const KIM_SPECIES_NAME_In = {ID_In};  // Indium
143 KIM_SpeciesName const KIM_SPECIES_NAME_Sn = {ID_Sn};  // Tin
144 KIM_SpeciesName const KIM_SPECIES_NAME_Sb = {ID_Sb};  // Antimony
145 KIM_SpeciesName const KIM_SPECIES_NAME_Te = {ID_Te};  // Tellurium
146 KIM_SpeciesName const KIM_SPECIES_NAME_I = {ID_I};  // Iodine
147 KIM_SpeciesName const KIM_SPECIES_NAME_Xe = {ID_Xe};  // Xenon
148 KIM_SpeciesName const KIM_SPECIES_NAME_Cs = {ID_Cs};  // Cesium
149 KIM_SpeciesName const KIM_SPECIES_NAME_Ba = {ID_Ba};  // Barium
150 KIM_SpeciesName const KIM_SPECIES_NAME_La = {ID_La};  // Lanthanum
151 KIM_SpeciesName const KIM_SPECIES_NAME_Ce = {ID_Ce};  // Cerium
152 KIM_SpeciesName const KIM_SPECIES_NAME_Pr = {ID_Pr};  // Praseodymium
153 KIM_SpeciesName const KIM_SPECIES_NAME_Nd = {ID_Nd};  // Neodymium
154 KIM_SpeciesName const KIM_SPECIES_NAME_Pm = {ID_Pm};  // Promethium
155 KIM_SpeciesName const KIM_SPECIES_NAME_Sm = {ID_Sm};  // Samarium
156 KIM_SpeciesName const KIM_SPECIES_NAME_Eu = {ID_Eu};  // Europium
157 KIM_SpeciesName const KIM_SPECIES_NAME_Gd = {ID_Gd};  // Gadolinium
158 KIM_SpeciesName const KIM_SPECIES_NAME_Tb = {ID_Tb};  // Terbium
159 KIM_SpeciesName const KIM_SPECIES_NAME_Dy = {ID_Dy};  // Dysprosium
160 KIM_SpeciesName const KIM_SPECIES_NAME_Ho = {ID_Ho};  // Holmium
161 KIM_SpeciesName const KIM_SPECIES_NAME_Er = {ID_Er};  // Erbium
162 KIM_SpeciesName const KIM_SPECIES_NAME_Tm = {ID_Tm};  // Thulium
163 KIM_SpeciesName const KIM_SPECIES_NAME_Yb = {ID_Yb};  // Ytterbium
164 KIM_SpeciesName const KIM_SPECIES_NAME_Lu = {ID_Lu};  // Lutetium
165 KIM_SpeciesName const KIM_SPECIES_NAME_Hf = {ID_Hf};  // Hafnium
166 KIM_SpeciesName const KIM_SPECIES_NAME_Ta = {ID_Ta};  // Tantalum
167 KIM_SpeciesName const KIM_SPECIES_NAME_W = {ID_W};  // Tungsten
168 KIM_SpeciesName const KIM_SPECIES_NAME_Re = {ID_Re};  // Rhenium
169 KIM_SpeciesName const KIM_SPECIES_NAME_Os = {ID_Os};  // Osmium
170 KIM_SpeciesName const KIM_SPECIES_NAME_Ir = {ID_Ir};  // Iridium
171 KIM_SpeciesName const KIM_SPECIES_NAME_Pt = {ID_Pt};  // Platinum
172 KIM_SpeciesName const KIM_SPECIES_NAME_Au = {ID_Au};  // Gold
173 KIM_SpeciesName const KIM_SPECIES_NAME_Hg = {ID_Hg};  // Mercury
174 KIM_SpeciesName const KIM_SPECIES_NAME_Tl = {ID_Tl};  // Thallium
175 KIM_SpeciesName const KIM_SPECIES_NAME_Pb = {ID_Pb};  // Lead
176 KIM_SpeciesName const KIM_SPECIES_NAME_Bi = {ID_Bi};  // Bismuth
177 KIM_SpeciesName const KIM_SPECIES_NAME_Po = {ID_Po};  // Polonium
178 KIM_SpeciesName const KIM_SPECIES_NAME_At = {ID_At};  // Astatine
179 KIM_SpeciesName const KIM_SPECIES_NAME_Rn = {ID_Rn};  // Radon
180 KIM_SpeciesName const KIM_SPECIES_NAME_Fr = {ID_Fr};  // Francium
181 KIM_SpeciesName const KIM_SPECIES_NAME_Ra = {ID_Ra};  // Radium
182 KIM_SpeciesName const KIM_SPECIES_NAME_Ac = {ID_Ac};  // Actinium
183 KIM_SpeciesName const KIM_SPECIES_NAME_Th = {ID_Th};  // Thorium
184 KIM_SpeciesName const KIM_SPECIES_NAME_Pa = {ID_Pa};  // Protactinium
185 KIM_SpeciesName const KIM_SPECIES_NAME_U = {ID_U};  // Uranium
186 KIM_SpeciesName const KIM_SPECIES_NAME_Np = {ID_Np};  // Neptunium
187 KIM_SpeciesName const KIM_SPECIES_NAME_Pu = {ID_Pu};  // Plutonium
188 KIM_SpeciesName const KIM_SPECIES_NAME_Am = {ID_Am};  // Americium
189 KIM_SpeciesName const KIM_SPECIES_NAME_Cm = {ID_Cm};  // Curium
190 KIM_SpeciesName const KIM_SPECIES_NAME_Bk = {ID_Bk};  // Berkelium
191 KIM_SpeciesName const KIM_SPECIES_NAME_Cf = {ID_Cf};  // Californium
192 KIM_SpeciesName const KIM_SPECIES_NAME_Es = {ID_Es};  // Einsteinium
193 KIM_SpeciesName const KIM_SPECIES_NAME_Fm = {ID_Fm};  // Fermium
194 KIM_SpeciesName const KIM_SPECIES_NAME_Md = {ID_Md};  // Mendelevium
195 KIM_SpeciesName const KIM_SPECIES_NAME_No = {ID_No};  // Nobelium
196 KIM_SpeciesName const KIM_SPECIES_NAME_Lr = {ID_Lr};  // Lawrencium
197 KIM_SpeciesName const KIM_SPECIES_NAME_Rf = {ID_Rf};  // Rutherfordium
198 KIM_SpeciesName const KIM_SPECIES_NAME_Db = {ID_Db};  // Dubnium
199 KIM_SpeciesName const KIM_SPECIES_NAME_Sg = {ID_Sg};  // Seaborgium
200 KIM_SpeciesName const KIM_SPECIES_NAME_Bh = {ID_Bh};  // Bohrium
201 KIM_SpeciesName const KIM_SPECIES_NAME_Hs = {ID_Hs};  // Hassium
202 KIM_SpeciesName const KIM_SPECIES_NAME_Mt = {ID_Mt};  // Meitnerium
203 KIM_SpeciesName const KIM_SPECIES_NAME_Ds = {ID_Ds};  // Darmstadtium
204 KIM_SpeciesName const KIM_SPECIES_NAME_Rg = {ID_Rg};  // Roentgenium
205 KIM_SpeciesName const KIM_SPECIES_NAME_Cn = {ID_Cn};  // Copernicium
206 KIM_SpeciesName const KIM_SPECIES_NAME_Nh = {ID_Nh};  // Nihonium
207 KIM_SpeciesName const KIM_SPECIES_NAME_Fl = {ID_Fl};  // Flerovium
208 KIM_SpeciesName const KIM_SPECIES_NAME_Mc = {ID_Mc};  // Moscovium
209 KIM_SpeciesName const KIM_SPECIES_NAME_Lv = {ID_Lv};  // Livermorium
210 KIM_SpeciesName const KIM_SPECIES_NAME_Ts = {ID_Ts};  // Tennessine
211 KIM_SpeciesName const KIM_SPECIES_NAME_Og = {ID_Og};  // Oganesson
212 KIM_SpeciesName const KIM_SPECIES_NAME_user01 = {ID_user01};  // user defined
213 KIM_SpeciesName const KIM_SPECIES_NAME_user02 = {ID_user02};  // user defined
214 KIM_SpeciesName const KIM_SPECIES_NAME_user03 = {ID_user03};  // user defined
215 KIM_SpeciesName const KIM_SPECIES_NAME_user04 = {ID_user04};  // user defined
216 KIM_SpeciesName const KIM_SPECIES_NAME_user05 = {ID_user05};  // user defined
217 KIM_SpeciesName const KIM_SPECIES_NAME_user06 = {ID_user06};  // user defined
218 KIM_SpeciesName const KIM_SPECIES_NAME_user07 = {ID_user07};  // user defined
219 KIM_SpeciesName const KIM_SPECIES_NAME_user08 = {ID_user08};  // user defined
220 KIM_SpeciesName const KIM_SPECIES_NAME_user09 = {ID_user09};  // user defined
221 KIM_SpeciesName const KIM_SPECIES_NAME_user10 = {ID_user10};  // user defined
222 KIM_SpeciesName const KIM_SPECIES_NAME_user11 = {ID_user11};  // user defined
223 KIM_SpeciesName const KIM_SPECIES_NAME_user12 = {ID_user12};  // user defined
224 KIM_SpeciesName const KIM_SPECIES_NAME_user13 = {ID_user13};  // user defined
225 KIM_SpeciesName const KIM_SPECIES_NAME_user14 = {ID_user14};  // user defined
226 KIM_SpeciesName const KIM_SPECIES_NAME_user15 = {ID_user15};  // user defined
227 KIM_SpeciesName const KIM_SPECIES_NAME_user16 = {ID_user16};  // user defined
228 KIM_SpeciesName const KIM_SPECIES_NAME_user17 = {ID_user17};  // user defined
229 KIM_SpeciesName const KIM_SPECIES_NAME_user18 = {ID_user18};  // user defined
230 KIM_SpeciesName const KIM_SPECIES_NAME_user19 = {ID_user19};  // user defined
231 KIM_SpeciesName const KIM_SPECIES_NAME_user20 = {ID_user20};  // user defined
232 
KIM_SPECIES_NAME_GetNumberOfSpeciesNames(int * const numberOfSpeciesNames)233 void KIM_SPECIES_NAME_GetNumberOfSpeciesNames(int * const numberOfSpeciesNames)
234 {
235   KIM::SPECIES_NAME::GetNumberOfSpeciesNames(numberOfSpeciesNames);
236 }
237 
KIM_SPECIES_NAME_GetSpeciesName(int const index,KIM_SpeciesName * const speciesName)238 int KIM_SPECIES_NAME_GetSpeciesName(int const index,
239                                     KIM_SpeciesName * const speciesName)
240 {
241   KIM::SpeciesName speciesNameCpp;
242   int error = KIM::SPECIES_NAME::GetSpeciesName(index, &speciesNameCpp);
243   if (error) return error;
244   *speciesName = makeSpeciesNameC(speciesNameCpp);
245   return false;
246 }
247 
248 }  // extern "C"
249