aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkVptr.h
blob: 2a33ad06c76f1d55e02ae20e29c7e25461dff363 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
 * Copyright 2017 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkVptr_DEFINED
#define SkVptr_DEFINED

#include <string.h>
#include <type_traits>

// Experimentally, see if we can get at the vptr of objects with one.

template <typename T>
static inline void* SkVptr(const T& object) {
    static_assert(std::has_virtual_destructor<T>::value, "");
    void* vptr;
    memcpy(&vptr, (const void*)&object, sizeof(vptr));
    return vptr;
}

#endif//SkVptr_DEFINED