1// Copyright 2018 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#pragma once 6 7#include <fbl/type_support.h> 8 9namespace ddk { 10namespace internal { 11 12DECLARE_HAS_MEMBER_FN_WITH_SIGNATURE(has_canvas_config, CanvasConfig, 13 zx_status_t (C::*)(zx_handle_t, size_t, canvas_info_t*, uint8_t*)); 14DECLARE_HAS_MEMBER_FN_WITH_SIGNATURE(has_canvas_free, CanvasFree, 15 zx_status_t (C::*)(uint8_t)); 16 17template <typename D> 18constexpr void CheckCanvasProtocolSubclass() { 19 static_assert(internal::has_canvas_config<D>::value, 20 "CanvasProtocol subclasses must implement " 21 "CanvasConfig(zx_handle_t vmo, size_t offset, canvas_info_t* info, " 22 "uint8_t* canvas_idx)"); 23 static_assert(internal::has_canvas_free<D>::value, 24 "CanvasProtocol subclasses must implement " 25 "CanvasFree(uint8_t canvas_idx)"); 26 } 27 28} // namespace internal 29} // namespace ddk 30