1296417Sdim//==- llvm/Support/Windows/COM.inc - Windows COM Implementation -*- C++ -*-===//
2283625Sdim//
3283625Sdim//                     The LLVM Compiler Infrastructure
4283625Sdim//
5283625Sdim// This file is distributed under the University of Illinois Open Source
6283625Sdim// License. See LICENSE.TXT for details.
7283625Sdim//
8283625Sdim//===----------------------------------------------------------------------===//
9283625Sdim//
10283625Sdim// This file implements the Windows portion of COM support.
11283625Sdim//
12283625Sdim//===----------------------------------------------------------------------===//
13283625Sdim
14283625Sdim//===----------------------------------------------------------------------===//
15283625Sdim//=== WARNING: Implementation here must contain only Windows code.
16283625Sdim//===----------------------------------------------------------------------===//
17283625Sdim
18283625Sdim#include <objbase.h>
19283625Sdim
20283625Sdimnamespace llvm {
21283625Sdimnamespace sys {
22283625Sdim
23283625SdimInitializeCOMRAII::InitializeCOMRAII(COMThreadingMode Threading,
24283625Sdim                                     bool SpeedOverMemory) {
25283625Sdim  DWORD Coinit = 0;
26283625Sdim  if (Threading == COMThreadingMode::SingleThreaded)
27283625Sdim    Coinit |= COINIT_APARTMENTTHREADED;
28283625Sdim  else
29283625Sdim    Coinit |= COINIT_MULTITHREADED;
30283625Sdim  if (SpeedOverMemory)
31283625Sdim    Coinit |= COINIT_SPEED_OVER_MEMORY;
32283625Sdim  ::CoInitializeEx(nullptr, Coinit);
33283625Sdim}
34283625Sdim
35283625SdimInitializeCOMRAII::~InitializeCOMRAII() { ::CoUninitialize(); }
36283625Sdim}
37283625Sdim}
38