blob: 34a3d7ab21c790469ebeb2ac29c673a88a3a1b2e [file] [log] [blame]
Allan MacKinnon4359d522018-06-19 13:57:04 -07001/*
2 * Copyright 2017 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can
5 * be found in the LICENSE file.
6 *
7 */
8
9#pragma once
10
11//
12//
13//
14
15#include "types.h"
16
17//
18// Add defensive high guard-bit flags to the opaque path and raster
19// handles. This is tested once and stripped down to a handle.
20//
21// union skc_typed_handle
22// {
23// skc_uint u32;
24//
25// struct {
26// skc_uint handle : 30;
27// skc_uint is_path : 1;
28// skc_uint is_raster : 1;
29// };
30// struct {
31// skc_uint na : 30;
32// skc_uint type : 2;
33// };
34// }
35//
36
37typedef enum skc_typed_handle_type_e
38{
39 SKC_TYPED_HANDLE_TYPE_IS_PATH = 0x40000000,
40 SKC_TYPED_HANDLE_TYPE_IS_RASTER = 0x80000000
41} skc_typed_handle_type_e;
Hal Canary14195342018-07-11 16:10:14 -040042
Allan MacKinnon4359d522018-06-19 13:57:04 -070043typedef skc_uint skc_typed_handle_t;
44typedef skc_uint skc_handle_t;
45
46//
47//
48//
49
50#define SKC_TYPED_HANDLE_MASK_TYPE (SKC_TYPED_HANDLE_TYPE_IS_PATH | SKC_TYPED_HANDLE_TYPE_IS_RASTER)
51
52#define SKC_TYPED_HANDLE_TO_HANDLE(h) ((h) & ~SKC_TYPED_HANDLE_MASK_TYPE)
53
54#define SKC_TYPED_HANDLE_IS_TYPE(h,t) ((h) & (t))
55#define SKC_TYPED_HANDLE_IS_PATH(h) ((h) & SKC_TYPED_HANDLE_TYPE_IS_PATH)
56#define SKC_TYPED_HANDLE_IS_RASTER(h) ((h) & SKC_TYPED_HANDLE_TYPE_IS_RASTER)
57
58//
59//
60//