// Copyright (c) 2020 The Chromium Embedded Framework 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 file was generated by the CEF translator tool. If making changes by
// hand only do so within the body of existing method and function
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=37c8c576c5bccd43f6124095e4ad55e88bc1a185$
//

#include "libcef_dll/cpptoc/registration_cpptoc.h"
#include "libcef_dll/shutdown_checker.h"

// CONSTRUCTOR - Do not edit by hand.

CefRegistrationCppToC::CefRegistrationCppToC() {}

// DESTRUCTOR - Do not edit by hand.

CefRegistrationCppToC::~CefRegistrationCppToC() {
  shutdown_checker::AssertNotShutdown();
}

template <>
CefRefPtr<CefRegistration>
CefCppToCRefCounted<CefRegistrationCppToC,
                    CefRegistration,
                    cef_registration_t>::UnwrapDerived(CefWrapperType type,
                                                       cef_registration_t* s) {
  NOTREACHED() << "Unexpected class type: " << type;
  return nullptr;
}

template <>
CefWrapperType CefCppToCRefCounted<CefRegistrationCppToC,
                                   CefRegistration,
                                   cef_registration_t>::kWrapperType =
    WT_REGISTRATION;
