BCCContext.cpp revision 1c30cee77f9a148215a0dacee2d922d1ec1b3bae
11c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang/*
21c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * Copyright 2012, The Android Open Source Project
31c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang *
41c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * Licensed under the Apache License, Version 2.0 (the "License");
51c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * you may not use this file except in compliance with the License.
61c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * You may obtain a copy of the License at
71c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang *
81c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang *     http://www.apache.org/licenses/LICENSE-2.0
91c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang *
101c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * Unless required by applicable law or agreed to in writing, software
111c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * distributed under the License is distributed on an "AS IS" BASIS,
121c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * See the License for the specific language governing permissions and
141c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * limitations under the License.
151c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang */
161c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
171c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang#include "BCCContext.h"
181c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
191c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang#include <new>
201c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
211c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang#include "BCCContextImpl.h"
221c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang#include "DebugHelper.h"
231c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
241c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Changusing namespace bcc;
251c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
261c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Changstatic BCCContext *GlobalContext = NULL;
271c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
281c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr ChangBCCContext *BCCContext::GetOrCreateGlobalContext() {
291c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  if (GlobalContext == NULL) {
301c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang    GlobalContext = new (std::nothrow) BCCContext();
311c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang    if (GlobalContext == NULL) {
321c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang      ALOGE("Out of memory when allocating global BCCContext!");
331c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang    }
341c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  }
351c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  return GlobalContext;
361c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang}
371c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
381c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Changvoid BCCContext::DestroyGlobalContext() {
391c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  delete GlobalContext;
401c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  GlobalContext = NULL;
411c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang}
421c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
431c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr ChangBCCContext::BCCContext() : mImpl(new BCCContextImpl(*this)) { }
441c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
451c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr ChangBCCContext::~BCCContext() {
461c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  delete mImpl;
471c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  if (this == GlobalContext) {
481c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang    // We're deleting the context returned from GetOrCreateGlobalContext().
491c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang    // Reset the GlobalContext.
501c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang    GlobalContext = NULL;
511c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  }
521c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  return;
531c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang}
541c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
551c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Changllvm::LLVMContext &BCCContext::getLLVMContext()
561c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang{ return mImpl->mLLVMContext; }
571c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
581c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Changconst llvm::LLVMContext &BCCContext::getLLVMContext() const
591c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang{ return mImpl->mLLVMContext; }
60