1be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat/*
2be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat * Copyright (C) 2015 The Android Open Source Project
3be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat *
4be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat * Licensed under the Apache License, Version 2.0 (the "License");
5be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat * you may not use this file except in compliance with the License.
6be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat * You may obtain a copy of the License at
7be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat *
8be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat *      http://www.apache.org/licenses/LICENSE-2.0
9be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat *
10be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat * Unless required by applicable law or agreed to in writing, software
11be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat * distributed under the License is distributed on an "AS IS" BASIS,
12be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat * See the License for the specific language governing permissions and
14be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat * limitations under the License.
15be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat */
16be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat
17be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat#include <binderwrapper/binder_wrapper.h>
18be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat
19be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat#include <base/logging.h>
20be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat
21be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat#include "real_binder_wrapper.h"
22be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat
23be43a39ff56ca8840ccfed048f75633adc535e92Daniel Eratnamespace android {
24be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat
25be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat// Singleton instance.
26be43a39ff56ca8840ccfed048f75633adc535e92Daniel EratBinderWrapper* BinderWrapper::instance_ = nullptr;
27be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat
28be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat// static
29be43a39ff56ca8840ccfed048f75633adc535e92Daniel Eratvoid BinderWrapper::Create() {
30be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat  CHECK(!instance_) << "Already initialized; missing call to Destroy()?";
31be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat  instance_ = new RealBinderWrapper();
32be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat}
33be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat
34be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat// static
35be43a39ff56ca8840ccfed048f75633adc535e92Daniel Eratvoid BinderWrapper::InitForTesting(BinderWrapper* wrapper) {
36be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat  CHECK(!instance_) << "Already initialized; missing call to Destroy()?";
37be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat  instance_ = wrapper;
38be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat}
39be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat
40be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat// static
41be43a39ff56ca8840ccfed048f75633adc535e92Daniel Eratvoid BinderWrapper::Destroy() {
42be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat  CHECK(instance_) << "Not initialized; missing call to Create()?";
43be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat  delete instance_;
44be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat  instance_ = nullptr;
45be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat}
46be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat
47be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat// static
48be43a39ff56ca8840ccfed048f75633adc535e92Daniel EratBinderWrapper* BinderWrapper::Get() {
49be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat  CHECK(instance_) << "Not initialized; missing call to Create()?";
50be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat  return instance_;
51be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat}
52be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat
5308c9891c9c850db7d7fdfcd77d694bcefe836884Alex Vakulenko// static
5408c9891c9c850db7d7fdfcd77d694bcefe836884Alex VakulenkoBinderWrapper* BinderWrapper::GetOrCreateInstance() {
5508c9891c9c850db7d7fdfcd77d694bcefe836884Alex Vakulenko  if (!instance_)
5608c9891c9c850db7d7fdfcd77d694bcefe836884Alex Vakulenko    instance_ = new RealBinderWrapper();
5708c9891c9c850db7d7fdfcd77d694bcefe836884Alex Vakulenko  return instance_;
5808c9891c9c850db7d7fdfcd77d694bcefe836884Alex Vakulenko}
5908c9891c9c850db7d7fdfcd77d694bcefe836884Alex Vakulenko
60be43a39ff56ca8840ccfed048f75633adc535e92Daniel Erat}  // namespace android
61