-
Notifications
You must be signed in to change notification settings - Fork 22
/
base_ref_counted.go
91 lines (78 loc) · 2.47 KB
/
base_ref_counted.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//----------------------------------------
//
// Copyright © yanghy. All Rights Reserved.
//
// Licensed under Apache License Version 2.0, January 2004
//
// https://www.apache.org/licenses/LICENSE-2.0
//
//----------------------------------------
package cef
import (
"github.com/energye/energy/v2/cef/internal/def"
"github.com/energye/energy/v2/common/imports"
"github.com/energye/golcl/lcl/api"
"unsafe"
)
type ICefBaseRefCounted interface {
Instance() uintptr
IsValid() bool
BaseRefCounted(instance uintptr) *TCefBaseRefCounted
}
func NewBaseRefCounted(instance uintptr) *TCefBaseRefCounted {
return &TCefBaseRefCounted{instance: unsafe.Pointer(instance)}
}
// BaseRefCounted
// 将实例转换为 TCefBaseRefCounted
func (m *TCefBaseRefCounted) BaseRefCounted(instance uintptr) *TCefBaseRefCounted {
m.instance = unsafe.Pointer(instance)
return m
}
// Wrap 指针引用包裹
// 调用以增加对象的引用计数。应该为指向给定对象的指针的每个新副本调用。
func (m *TCefBaseRefCounted) Wrap(data uintptr) unsafe.Pointer {
var result uintptr
imports.Proc(def.CefBaseRefCounted_Wrap).Call(data, uintptr(unsafe.Pointer(&result)))
return unsafe.Pointer(result)
}
// Free 释放底层指针
func (m *TCefBaseRefCounted) Free(data uintptr) {
imports.Proc(def.CefBaseRefCounted_Free).Call(uintptr(unsafe.Pointer(&data)))
m.instance = nil
}
// SameAs
// 将aData指针与当前实例的FData字段进行比较。
func (m *TCefBaseRefCounted) SameAs(data uintptr) bool {
r1, _, _ := imports.Proc(def.CefBaseRefCounted_SameAs).Call(m.Instance(), data)
return api.GoBool(r1)
}
// HasOneRef
// 如果当前引用计数为1,则返回true(1)。
func (m *TCefBaseRefCounted) HasOneRef() bool {
r1, _, _ := imports.Proc(def.CefBaseRefCounted_HasOneRef).Call(m.Instance())
return api.GoBool(r1)
}
// HasAtLeastOneRef
// 如果当前引用计数至少为1,则返回true(1)。
func (m *TCefBaseRefCounted) HasAtLeastOneRef() bool {
r1, _, _ := imports.Proc(def.CefBaseRefCounted_HasAtLeastOneRef).Call(m.Instance())
return api.GoBool(r1)
}
// DestroyOtherRefs
// 释放所有其他实例。
func (m *TCefBaseRefCounted) DestroyOtherRefs() {
imports.Proc(def.CefBaseRefCounted_DestroyOtherRefs).Call(m.Instance())
}
// Instance 实例
func (m *TCefBaseRefCounted) Instance() uintptr {
if m == nil {
return 0
}
return uintptr(m.instance)
}
func (m *TCefBaseRefCounted) IsValid() bool {
if m == nil || m.instance == nil {
return false
}
return m.instance != nil
}