Skip to content

Commit

Permalink
Make an RAII com initializer.
Browse files Browse the repository at this point in the history
Differential Revision: http://reviews.llvm.org/D9267
Reviewed By: Aaron Ballman, David Majnemer

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235898 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
Zachary Turner committed Apr 27, 2015
1 parent 4e9cdec commit d8caa1c
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 0 deletions.
36 changes: 36 additions & 0 deletions include/llvm/Support/COM.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
//===- llvm/Support/COM.h ---------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
/// \file
///
/// Provides a library for accessing COM functionality of the Host OS.
///
//===----------------------------------------------------------------------===//

#ifndef LLVM_SUPPORT_COM_H
#define LLVM_SUPPORT_COM_H

namespace llvm {
namespace sys {

enum class COMThreadingMode { SingleThreaded, MultiThreaded };

class InitializeCOMRAII {
public:
explicit InitializeCOMRAII(COMThreadingMode Threading,
bool SpeedOverMemory = false);
~InitializeCOMRAII();

private:
InitializeCOMRAII(const InitializeCOMRAII &) = delete;
void operator=(const InitializeCOMRAII &) = delete;
};
}
}

#endif
1 change: 1 addition & 0 deletions lib/Support/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ add_llvm_library(LLVMSupport
BlockFrequency.cpp
BranchProbability.cpp
circular_raw_ostream.cpp
COM.cpp
CommandLine.cpp
Compression.cpp
ConvertUTF.c
Expand Down
23 changes: 23 additions & 0 deletions lib/Support/COM.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//===-- COM.cpp - Implement COM utility classes -----------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements utility classes related to COM.
//
//===----------------------------------------------------------------------===//

#include "llvm/Support/COM.h"

#include "llvm/Config/config.h"

// Include the platform-specific parts of this class.
#ifdef LLVM_ON_UNIX
#include "Unix/COM.inc"
#elif LLVM_ON_WIN32
#include "Windows/COM.inc"
#endif
27 changes: 27 additions & 0 deletions lib/Support/Unix/COM.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
//===- llvm/Support/Unix/COM.inc - Unix COM Implementation -----*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements the Unix portion of COM support.
//
//===----------------------------------------------------------------------===//

//===----------------------------------------------------------------------===//
//=== WARNING: Implementation here must contain only generic UNIX code that
//=== is guaranteed to work on *all* UNIX variants.
//===----------------------------------------------------------------------===//

namespace llvm {
namespace sys {

COMInitializer::COMInitializer(COMThreadingMode Threading,
bool SpeedOverMemory) {}

COMInitializer::~COMInitializer() {}
}
}
37 changes: 37 additions & 0 deletions lib/Support/Windows/COM.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
//===- llvm/Support/Windows/COM.inc - Windows COM Implementation *- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements the Windows portion of COM support.
//
//===----------------------------------------------------------------------===//

//===----------------------------------------------------------------------===//
//=== WARNING: Implementation here must contain only Windows code.
//===----------------------------------------------------------------------===//

#include <objbase.h>

namespace llvm {
namespace sys {

InitializeCOMRAII::InitializeCOMRAII(COMThreadingMode Threading,
bool SpeedOverMemory) {
DWORD Coinit = 0;
if (Threading == COMThreadingMode::SingleThreaded)
Coinit |= COINIT_APARTMENTTHREADED;
else
Coinit |= COINIT_MULTITHREADED;
if (SpeedOverMemory)
Coinit |= COINIT_SPEED_OVER_MEMORY;
::CoInitializeEx(nullptr, Coinit);
}

InitializeCOMRAII::~InitializeCOMRAII() { ::CoUninitialize(); }
}
}

0 comments on commit d8caa1c

Please sign in to comment.