Mercurial > games > semicongine
comparison fuhtark_test/include/winapi/comip.h @ 1500:91c8c3b7cbf0
add: futhark tests for generating vulkan api
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 26 Nov 2025 21:36:48 +0700 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1499:1f58458b7ef7 | 1500:91c8c3b7cbf0 |
|---|---|
| 1 /** | |
| 2 * This file has no copyright assigned and is placed in the Public Domain. | |
| 3 * This file is part of the w64 mingw-runtime package. | |
| 4 * No warranty is given; refer to the file DISCLAIMER within this package. | |
| 5 */ | |
| 6 #ifndef _INC_COMIP | |
| 7 #define _INC_COMIP | |
| 8 | |
| 9 #include <_mingw.h> | |
| 10 | |
| 11 #if USE___UUIDOF == 0 | |
| 12 #error No __uuidof support for this target | |
| 13 #endif | |
| 14 | |
| 15 #include <ole2.h> | |
| 16 #include <malloc.h> | |
| 17 | |
| 18 #include <comutil.h> | |
| 19 | |
| 20 #ifdef __cplusplus | |
| 21 | |
| 22 #pragma push_macro("new") | |
| 23 #undef new | |
| 24 | |
| 25 #include <new.h> | |
| 26 | |
| 27 class _com_error; | |
| 28 | |
| 29 #ifndef WINAPI | |
| 30 #define WINAPI __stdcall | |
| 31 #endif | |
| 32 | |
| 33 void WINAPI _com_issue_error(HRESULT); | |
| 34 struct IUnknown; | |
| 35 | |
| 36 template<typename _Interface,const IID *_IID > | |
| 37 class _com_IIID { | |
| 38 public: | |
| 39 typedef _Interface Interface; | |
| 40 static _Interface *GetInterfacePtr() throw() { return NULL; } | |
| 41 static _Interface& GetInterface() throw() { return *GetInterfacePtr(); } | |
| 42 static const IID& GetIID() throw() { return *_IID; } | |
| 43 }; | |
| 44 | |
| 45 template<typename _IIID> class _com_ptr_t { | |
| 46 public: | |
| 47 typedef _IIID ThisIIID; | |
| 48 typedef typename _IIID::Interface Interface; | |
| 49 static const IID& GetIID() throw() { return ThisIIID::GetIID(); } | |
| 50 template<typename _OtherIID> _com_ptr_t(const _com_ptr_t<_OtherIID> &p) : m_pInterface(NULL) { | |
| 51 HRESULT hr = _QueryInterface(p); | |
| 52 if(FAILED(hr) && (hr!=E_NOINTERFACE)) { _com_issue_error(hr); } | |
| 53 } | |
| 54 template<typename _InterfaceType> _com_ptr_t(_InterfaceType *p) : m_pInterface(NULL) { | |
| 55 HRESULT hr = _QueryInterface(p); | |
| 56 if(FAILED(hr) && (hr!=E_NOINTERFACE)) { _com_issue_error(hr); } | |
| 57 } | |
| 58 template<> _com_ptr_t(LPSTR str) { new(this) _com_ptr_t(static_cast<LPCSTR> (str),NULL); } | |
| 59 template<> _com_ptr_t(LPWSTR str) { new(this) _com_ptr_t(static_cast<LPCWSTR> (str),NULL); } | |
| 60 template<> explicit _com_ptr_t(_com_ptr_t *p) : m_pInterface(NULL) { | |
| 61 if(!p) { _com_issue_error(E_POINTER); } | |
| 62 else { | |
| 63 m_pInterface = p->m_pInterface; | |
| 64 AddRef(); | |
| 65 } | |
| 66 } | |
| 67 _com_ptr_t() throw() : m_pInterface(NULL) { } | |
| 68 _com_ptr_t(int null) : m_pInterface(NULL) { | |
| 69 if(null!=0) { _com_issue_error(E_POINTER); } | |
| 70 } | |
| 71 _com_ptr_t(const _com_ptr_t &cp) throw() : m_pInterface(cp.m_pInterface) { _AddRef(); } | |
| 72 template<> _com_ptr_t(Interface *pInterface) throw() : m_pInterface(pInterface) { _AddRef(); } | |
| 73 _com_ptr_t(Interface *pInterface,bool fAddRef) throw() : m_pInterface(pInterface) { | |
| 74 if(fAddRef) _AddRef(); | |
| 75 } | |
| 76 _com_ptr_t(const _variant_t& varSrc) : m_pInterface(NULL) { | |
| 77 HRESULT hr = QueryStdInterfaces(varSrc); | |
| 78 if(FAILED(hr) && (hr!=E_NOINTERFACE)) { _com_issue_error(hr); } | |
| 79 } | |
| 80 explicit _com_ptr_t(const CLSID &clsid,IUnknown *pOuter = NULL,DWORD dwClsContext = CLSCTX_ALL) : m_pInterface(NULL) { | |
| 81 HRESULT hr = CreateInstance(clsid,pOuter,dwClsContext); | |
| 82 if(FAILED(hr) && (hr!=E_NOINTERFACE)) { _com_issue_error(hr); } | |
| 83 } | |
| 84 explicit _com_ptr_t(LPCWSTR str,IUnknown *pOuter = NULL,DWORD dwClsContext = CLSCTX_ALL) : m_pInterface(NULL) { | |
| 85 HRESULT hr = CreateInstance(str,pOuter,dwClsContext); | |
| 86 if(FAILED(hr) && (hr!=E_NOINTERFACE)) { _com_issue_error(hr); } | |
| 87 } | |
| 88 explicit _com_ptr_t(LPCSTR str,IUnknown *pOuter = NULL,DWORD dwClsContext = CLSCTX_ALL) : m_pInterface(NULL) { | |
| 89 HRESULT hr = CreateInstance(str,pOuter,dwClsContext); | |
| 90 if(FAILED(hr) && (hr!=E_NOINTERFACE)) { _com_issue_error(hr); } | |
| 91 } | |
| 92 template<typename _OtherIID> _com_ptr_t &operator=(const _com_ptr_t<_OtherIID> &p) { | |
| 93 HRESULT hr = _QueryInterface(p); | |
| 94 if(FAILED(hr) && (hr!=E_NOINTERFACE)) { _com_issue_error(hr); } | |
| 95 return *this; | |
| 96 } | |
| 97 template<typename _InterfaceType> _com_ptr_t &operator=(_InterfaceType *p) { | |
| 98 HRESULT hr = _QueryInterface(p); | |
| 99 if(FAILED(hr) && (hr!=E_NOINTERFACE)) { _com_issue_error(hr); } | |
| 100 return *this; | |
| 101 } | |
| 102 template<> _com_ptr_t &operator=(Interface *pInterface) throw() { | |
| 103 if(m_pInterface!=pInterface) { | |
| 104 Interface *pOldInterface = m_pInterface; | |
| 105 m_pInterface = pInterface; | |
| 106 _AddRef(); | |
| 107 if(pOldInterface!=NULL) pOldInterface->Release(); | |
| 108 } | |
| 109 return *this; | |
| 110 } | |
| 111 _com_ptr_t &operator=(const _com_ptr_t &cp) throw() { return operator=(cp.m_pInterface); } | |
| 112 _com_ptr_t &operator=(int null) { | |
| 113 if(null!=0) { _com_issue_error(E_POINTER); } | |
| 114 return operator=(reinterpret_cast<Interface*>(NULL)); | |
| 115 } | |
| 116 _com_ptr_t &operator=(const _variant_t& varSrc) { | |
| 117 HRESULT hr = QueryStdInterfaces(varSrc); | |
| 118 if(FAILED(hr) && (hr!=E_NOINTERFACE)) { _com_issue_error(hr); } | |
| 119 return *this; | |
| 120 } | |
| 121 ~_com_ptr_t() throw() { _Release(); } | |
| 122 void Attach(Interface *pInterface) throw() { | |
| 123 _Release(); | |
| 124 m_pInterface = pInterface; | |
| 125 } | |
| 126 void Attach(Interface *pInterface,bool fAddRef) throw() { | |
| 127 _Release(); | |
| 128 m_pInterface = pInterface; | |
| 129 if(fAddRef) { | |
| 130 if(!pInterface) { _com_issue_error(E_POINTER); } | |
| 131 else pInterface->AddRef(); | |
| 132 } | |
| 133 } | |
| 134 Interface *Detach() throw() { | |
| 135 Interface *const old = m_pInterface; | |
| 136 m_pInterface = NULL; | |
| 137 return old; | |
| 138 } | |
| 139 operator Interface*() const throw() { return m_pInterface; } | |
| 140 operator Interface&() const { | |
| 141 if(!m_pInterface) { _com_issue_error(E_POINTER); } | |
| 142 return *m_pInterface; | |
| 143 } | |
| 144 Interface& operator*() const { | |
| 145 if(!m_pInterface) { _com_issue_error(E_POINTER); } | |
| 146 return *m_pInterface; | |
| 147 } | |
| 148 Interface **operator&() throw() { | |
| 149 _Release(); | |
| 150 m_pInterface = NULL; | |
| 151 return &m_pInterface; | |
| 152 } | |
| 153 Interface *operator->() const { | |
| 154 if(!m_pInterface) { _com_issue_error(E_POINTER); } | |
| 155 return m_pInterface; | |
| 156 } | |
| 157 operator bool() const throw() { return m_pInterface!=NULL; } | |
| 158 template<typename _OtherIID> bool operator==(const _com_ptr_t<_OtherIID> &p) { return _CompareUnknown(p)==0; } | |
| 159 template<typename _OtherIID> bool operator==(_com_ptr_t<_OtherIID> &p) { return _CompareUnknown(p)==0; } | |
| 160 template<typename _InterfaceType> bool operator==(_InterfaceType *p) { return _CompareUnknown(p)==0; } | |
| 161 template<> bool operator==(Interface *p) { return (m_pInterface==p) ? true : _CompareUnknown(p)==0; } | |
| 162 template<> bool operator==(const _com_ptr_t &p) throw() { return operator==(p.m_pInterface); } | |
| 163 template<> bool operator==(_com_ptr_t &p) throw() { return operator==(p.m_pInterface); } | |
| 164 bool operator==(int null) { | |
| 165 if(null!=0) { _com_issue_error(E_POINTER); } | |
| 166 return !m_pInterface; | |
| 167 } | |
| 168 template<typename _OtherIID> bool operator!=(const _com_ptr_t<_OtherIID> &p) { return !(operator==(p)); } | |
| 169 template<typename _OtherIID> bool operator!=(_com_ptr_t<_OtherIID> &p) { return !(operator==(p)); } | |
| 170 template<typename _InterfaceType> bool operator!=(_InterfaceType *p) { return !(operator==(p)); } | |
| 171 bool operator!=(int null) { return !(operator==(null)); } | |
| 172 template<typename _OtherIID> bool operator<(const _com_ptr_t<_OtherIID> &p) { return _CompareUnknown(p)<0; } | |
| 173 template<typename _OtherIID> bool operator<(_com_ptr_t<_OtherIID> &p) { return _CompareUnknown(p)<0; } | |
| 174 template<typename _InterfaceType> bool operator<(_InterfaceType *p) { return _CompareUnknown(p)<0; } | |
| 175 template<typename _OtherIID> bool operator>(const _com_ptr_t<_OtherIID> &p) { return _CompareUnknown(p)>0; } | |
| 176 template<typename _OtherIID> bool operator>(_com_ptr_t<_OtherIID> &p) { return _CompareUnknown(p)>0; } | |
| 177 template<typename _InterfaceType> bool operator>(_InterfaceType *p) { return _CompareUnknown(p)>0; } | |
| 178 template<typename _OtherIID> bool operator<=(const _com_ptr_t<_OtherIID> &p) { return _CompareUnknown(p)<=0; } | |
| 179 template<typename _OtherIID> bool operator<=(_com_ptr_t<_OtherIID> &p) { return _CompareUnknown(p)<=0; } | |
| 180 template<typename _InterfaceType> bool operator<=(_InterfaceType *p) { return _CompareUnknown(p)<=0; } | |
| 181 template<typename _OtherIID> bool operator>=(const _com_ptr_t<_OtherIID> &p) { return _CompareUnknown(p)>=0; } | |
| 182 template<typename _OtherIID> bool operator>=(_com_ptr_t<_OtherIID> &p) { return _CompareUnknown(p)>=0; } | |
| 183 template<typename _InterfaceType> bool operator>=(_InterfaceType *p) { return _CompareUnknown(p)>=0; } | |
| 184 void Release() { | |
| 185 if(!m_pInterface) { _com_issue_error(E_POINTER); } | |
| 186 else { | |
| 187 m_pInterface->Release(); | |
| 188 m_pInterface = NULL; | |
| 189 } | |
| 190 } | |
| 191 void AddRef() { | |
| 192 if(!m_pInterface) { _com_issue_error(E_POINTER); } | |
| 193 else m_pInterface->AddRef(); | |
| 194 } | |
| 195 Interface *GetInterfacePtr() const throw() { return m_pInterface; } | |
| 196 Interface*& GetInterfacePtr() throw() { return m_pInterface; } | |
| 197 HRESULT CreateInstance(const CLSID &rclsid,IUnknown *pOuter = NULL,DWORD dwClsContext = CLSCTX_ALL) throw() { | |
| 198 HRESULT hr; | |
| 199 _Release(); | |
| 200 if(dwClsContext & (CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)) { | |
| 201 IUnknown *pIUnknown; | |
| 202 hr = CoCreateInstance(rclsid,pOuter,dwClsContext,__uuidof(IUnknown),reinterpret_cast<void**>(&pIUnknown)); | |
| 203 if(SUCCEEDED(hr)) { | |
| 204 hr = OleRun(pIUnknown); | |
| 205 if(SUCCEEDED(hr)) hr = pIUnknown->QueryInterface(GetIID(),reinterpret_cast<void**>(&m_pInterface)); | |
| 206 pIUnknown->Release(); | |
| 207 } | |
| 208 } else hr = CoCreateInstance(rclsid,pOuter,dwClsContext,GetIID(),reinterpret_cast<void**>(&m_pInterface)); | |
| 209 if(FAILED(hr)) m_pInterface = NULL; | |
| 210 return hr; | |
| 211 } | |
| 212 HRESULT CreateInstance(LPCWSTR clsidString,IUnknown *pOuter = NULL,DWORD dwClsContext = CLSCTX_ALL) throw() { | |
| 213 if(!clsidString) return E_INVALIDARG; | |
| 214 CLSID clsid; | |
| 215 HRESULT hr; | |
| 216 if(clsidString[0]==L'{') hr = CLSIDFromString(const_cast<LPWSTR> (clsidString),&clsid); | |
| 217 else hr = CLSIDFromProgID(const_cast<LPWSTR> (clsidString),&clsid); | |
| 218 if(FAILED(hr)) return hr; | |
| 219 return CreateInstance(clsid,pOuter,dwClsContext); | |
| 220 } | |
| 221 HRESULT CreateInstance(LPCSTR clsidStringA,IUnknown *pOuter = NULL,DWORD dwClsContext = CLSCTX_ALL) throw() { | |
| 222 if(!clsidStringA) return E_INVALIDARG; | |
| 223 int size = lstrlenA(clsidStringA) + 1; | |
| 224 int destSize = MultiByteToWideChar(CP_ACP,0,clsidStringA,size,NULL,0); | |
| 225 if(destSize==0) return HRESULT_FROM_WIN32(GetLastError()); | |
| 226 LPWSTR clsidStringW; | |
| 227 clsidStringW = static_cast<LPWSTR>(_malloca(destSize*sizeof(WCHAR))); | |
| 228 if(!clsidStringW) return E_OUTOFMEMORY; | |
| 229 if(MultiByteToWideChar(CP_ACP,0,clsidStringA,size,clsidStringW,destSize)==0) { | |
| 230 _freea(clsidStringW); | |
| 231 return HRESULT_FROM_WIN32(GetLastError()); | |
| 232 } | |
| 233 HRESULT hr=CreateInstance(clsidStringW,pOuter,dwClsContext); | |
| 234 _freea(clsidStringW); | |
| 235 return hr; | |
| 236 } | |
| 237 HRESULT GetActiveObject(const CLSID &rclsid) throw() { | |
| 238 _Release(); | |
| 239 IUnknown *pIUnknown; | |
| 240 HRESULT hr = ::GetActiveObject(rclsid,NULL,&pIUnknown); | |
| 241 if(SUCCEEDED(hr)) { | |
| 242 hr = pIUnknown->QueryInterface(GetIID(),reinterpret_cast<void**>(&m_pInterface)); | |
| 243 pIUnknown->Release(); | |
| 244 } | |
| 245 if(FAILED(hr)) m_pInterface = NULL; | |
| 246 return hr; | |
| 247 } | |
| 248 HRESULT GetActiveObject(LPCWSTR clsidString) throw() { | |
| 249 if(!clsidString) return E_INVALIDARG; | |
| 250 CLSID clsid; | |
| 251 HRESULT hr; | |
| 252 if(clsidString[0]=='{') hr = CLSIDFromString(const_cast<LPWSTR> (clsidString),&clsid); | |
| 253 else hr = CLSIDFromProgID(const_cast<LPWSTR> (clsidString),&clsid); | |
| 254 if(FAILED(hr)) return hr; | |
| 255 return GetActiveObject(clsid); | |
| 256 } | |
| 257 HRESULT GetActiveObject(LPCSTR clsidStringA) throw() { | |
| 258 if(!clsidStringA) return E_INVALIDARG; | |
| 259 int size = lstrlenA(clsidStringA) + 1; | |
| 260 int destSize = MultiByteToWideChar(CP_ACP,0,clsidStringA,size,NULL,0); | |
| 261 LPWSTR clsidStringW; | |
| 262 __try { | |
| 263 clsidStringW = static_cast<LPWSTR>(_alloca(destSize*sizeof(WCHAR))); | |
| 264 } __except (1) { | |
| 265 clsidStringW = NULL; | |
| 266 } | |
| 267 if(!clsidStringW) return E_OUTOFMEMORY; | |
| 268 if(MultiByteToWideChar(CP_ACP,0,clsidStringA,size,clsidStringW,destSize)==0) return HRESULT_FROM_WIN32(GetLastError()); | |
| 269 return GetActiveObject(clsidStringW); | |
| 270 } | |
| 271 template<typename _InterfaceType> HRESULT QueryInterface(const IID& iid,_InterfaceType*& p) throw () { | |
| 272 if(m_pInterface!=NULL) return m_pInterface->QueryInterface(iid,reinterpret_cast<void**>(&p)); | |
| 273 return E_POINTER; | |
| 274 } | |
| 275 template<typename _InterfaceType> HRESULT QueryInterface(const IID& iid,_InterfaceType **p) throw() { return QueryInterface(iid,*p); } | |
| 276 private: | |
| 277 Interface *m_pInterface; | |
| 278 void _Release() throw() { | |
| 279 if(m_pInterface!=NULL) m_pInterface->Release(); | |
| 280 } | |
| 281 void _AddRef() throw() { | |
| 282 if(m_pInterface!=NULL) m_pInterface->AddRef(); | |
| 283 } | |
| 284 template<typename _InterfacePtr> HRESULT _QueryInterface(_InterfacePtr p) throw() { | |
| 285 HRESULT hr; | |
| 286 if(p!=NULL) { | |
| 287 Interface *pInterface; | |
| 288 hr = p->QueryInterface(GetIID(),reinterpret_cast<void**>(&pInterface)); | |
| 289 Attach(SUCCEEDED(hr)? pInterface: NULL); | |
| 290 } else { | |
| 291 operator=(static_cast<Interface*>(NULL)); | |
| 292 hr = E_NOINTERFACE; | |
| 293 } | |
| 294 return hr; | |
| 295 } | |
| 296 template<typename _InterfacePtr> int _CompareUnknown(_InterfacePtr p) { | |
| 297 IUnknown *pu1,*pu2; | |
| 298 if(m_pInterface!=NULL) { | |
| 299 HRESULT hr = m_pInterface->QueryInterface(__uuidof(IUnknown),reinterpret_cast<void**>(&pu1)); | |
| 300 if(FAILED(hr)) { | |
| 301 _com_issue_error(hr); | |
| 302 pu1 = NULL; | |
| 303 } else pu1->Release(); | |
| 304 } else pu1 = NULL; | |
| 305 if(p!=NULL) { | |
| 306 HRESULT hr = p->QueryInterface(__uuidof(IUnknown),reinterpret_cast<void**>(&pu2)); | |
| 307 if(FAILED(hr)) { | |
| 308 _com_issue_error(hr); | |
| 309 pu2 = NULL; | |
| 310 } else pu2->Release(); | |
| 311 } else pu2 = NULL; | |
| 312 return pu1 - pu2; | |
| 313 } | |
| 314 HRESULT QueryStdInterfaces(const _variant_t& varSrc) throw() { | |
| 315 if(V_VT(&varSrc)==VT_DISPATCH) return _QueryInterface(V_DISPATCH(&varSrc)); | |
| 316 if(V_VT(&varSrc)==VT_UNKNOWN) return _QueryInterface(V_UNKNOWN(&varSrc)); | |
| 317 VARIANT varDest; | |
| 318 VariantInit(&varDest); | |
| 319 HRESULT hr = VariantChangeType(&varDest,const_cast<VARIANT*>(static_cast<const VARIANT*>(&varSrc)),0,VT_DISPATCH); | |
| 320 if(SUCCEEDED(hr)) hr = _QueryInterface(V_DISPATCH(&varSrc)); | |
| 321 if(hr==E_NOINTERFACE) { | |
| 322 VariantInit(&varDest); | |
| 323 hr = VariantChangeType(&varDest,const_cast<VARIANT*>(static_cast<const VARIANT*>(&varSrc)),0,VT_UNKNOWN); | |
| 324 if(SUCCEEDED(hr)) hr = _QueryInterface(V_UNKNOWN(&varSrc)); | |
| 325 } | |
| 326 VariantClear(&varDest); | |
| 327 return hr; | |
| 328 } | |
| 329 }; | |
| 330 | |
| 331 template<typename _InterfaceType> bool operator==(int null,_com_ptr_t<_InterfaceType> &p) { | |
| 332 if(null!=0) { _com_issue_error(E_POINTER); } | |
| 333 return !p; | |
| 334 } | |
| 335 | |
| 336 template<typename _Interface,typename _InterfacePtr> bool operator==(_Interface *i,_com_ptr_t<_InterfacePtr> &p) { return p==i; } | |
| 337 | |
| 338 template<typename _Interface> bool operator!=(int null,_com_ptr_t<_Interface> &p) { | |
| 339 if(null!=0) { _com_issue_error(E_POINTER); } | |
| 340 return p!=NULL; | |
| 341 } | |
| 342 | |
| 343 template<typename _Interface,typename _InterfacePtr> bool operator!=(_Interface *i,_com_ptr_t<_InterfacePtr> &p) { return p!=i; } | |
| 344 | |
| 345 template<typename _Interface> bool operator<(int null,_com_ptr_t<_Interface> &p) { | |
| 346 if(null!=0) { _com_issue_error(E_POINTER); } | |
| 347 return p>NULL; | |
| 348 } | |
| 349 | |
| 350 template<typename _Interface,typename _InterfacePtr> bool operator<(_Interface *i,_com_ptr_t<_InterfacePtr> &p) { return p>i; } | |
| 351 | |
| 352 template<typename _Interface> bool operator>(int null,_com_ptr_t<_Interface> &p) { | |
| 353 if(null!=0) { _com_issue_error(E_POINTER); } | |
| 354 return p<NULL; | |
| 355 } | |
| 356 | |
| 357 template<typename _Interface,typename _InterfacePtr> bool operator>(_Interface *i,_com_ptr_t<_InterfacePtr> &p) { return p<i; } | |
| 358 | |
| 359 template<typename _Interface> bool operator<=(int null,_com_ptr_t<_Interface> &p) { | |
| 360 if(null!=0) { _com_issue_error(E_POINTER); } | |
| 361 return p>=NULL; | |
| 362 } | |
| 363 | |
| 364 template<typename _Interface,typename _InterfacePtr> bool operator<=(_Interface *i,_com_ptr_t<_InterfacePtr> &p) { return p>=i; } | |
| 365 | |
| 366 template<typename _Interface> bool operator>=(int null,_com_ptr_t<_Interface> &p) { | |
| 367 if(null!=0) { _com_issue_error(E_POINTER); } | |
| 368 return p<=NULL; | |
| 369 } | |
| 370 | |
| 371 template<typename _Interface,typename _InterfacePtr> bool operator>=(_Interface *i,_com_ptr_t<_InterfacePtr> &p) { return p<=i; } | |
| 372 | |
| 373 #pragma pop_macro("new") | |
| 374 | |
| 375 #endif /* __cplusplus */ | |
| 376 | |
| 377 #endif /* _INC_COMIP */ |
