// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This is the boilerplate implementation of the IAllocator HAL interface,
// generated by the hidl-gen tool and then modified for use on Chrome OS.
// Modifications include:
// - Removal of non boiler plate client and server related code.
// - Reformatting to meet the Chrome OS coding standards.
//
// Originally generated with the command:
// $ hidl-gen -o output -L c++-adapter -r android.hardware:hardware/interfaces \
//   android.hardware.neuralnetworks@1.3

#include <android/hardware/neuralnetworks/1.3/AExecutionCallback.h>
#include <android/hardware/neuralnetworks/1.0/AExecutionCallback.h>
#include <android/hardware/neuralnetworks/1.2/AExecutionCallback.h>
#include <android/hardware/neuralnetworks/1.3/IExecutionCallback.h>
#include <hidladapter/HidlBinderAdapter.h>

namespace android {
namespace hardware {
namespace neuralnetworks {
namespace V1_3 {

AExecutionCallback::AExecutionCallback(
    const ::android::sp<
        ::android::hardware::neuralnetworks::V1_3::IExecutionCallback>& impl)
    : mImpl(impl) {
}  // Methods from ::android::hardware::neuralnetworks::V1_0::IExecutionCallback
   // follow.
::android::hardware::Return<void> AExecutionCallback::notify(
    ::android::hardware::neuralnetworks::V1_0::ErrorStatus status) {
  auto _hidl_out = mImpl->notify(status);
  return _hidl_out;
}

// Methods from ::android::hardware::neuralnetworks::V1_2::IExecutionCallback
// follow.
::android::hardware::Return<void> AExecutionCallback::notify_1_2(
    ::android::hardware::neuralnetworks::V1_0::ErrorStatus status,
    const ::android::hardware::hidl_vec<
        ::android::hardware::neuralnetworks::V1_2::OutputShape>& outputShapes,
    const ::android::hardware::neuralnetworks::V1_2::Timing& timing) {
  auto _hidl_out = mImpl->notify_1_2(status, outputShapes, timing);
  return _hidl_out;
}

// Methods from ::android::hardware::neuralnetworks::V1_3::IExecutionCallback
// follow.
::android::hardware::Return<void> AExecutionCallback::notify_1_3(
    ::android::hardware::neuralnetworks::V1_3::ErrorStatus status,
    const ::android::hardware::hidl_vec<
        ::android::hardware::neuralnetworks::V1_2::OutputShape>& outputShapes,
    const ::android::hardware::neuralnetworks::V1_2::Timing& timing) {
  auto _hidl_out = mImpl->notify_1_3(status, outputShapes, timing);
  return _hidl_out;
}

// Methods from ::android::hidl::base::V1_0::IBase follow.

}  // namespace V1_3
}  // namespace neuralnetworks
}  // namespace hardware
}  // namespace android
