FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
diff/diff_pointer.go at master · r3labs/diff · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
r3labs
/
diff
Public
Notifications
You must be signed in to change notification settings
Fork
96
Star
983
Code
Issues
28
Pull requests
6
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
diff
/
diff_pointer.go
Copy path
More file actions
More file actions
Latest commit
History
History
History
60 lines (47 loc) · 1.38 KB
Breadcrumbs
diff
/
diff_pointer.go
Copy path
File metadata and controls
60 lines (47 loc) · 1.38 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package
diff
import
(
"reflect"
"unsafe"
)
var
isExportFlag
uintptr
=
(
1
<<
5
)
|
(
1
<<
6
)
func
(
d
*
Differ
)
diffPtr
(
path
[]
string
,
a
,
b
reflect.
Value
,
parent
interface
{})
error
{
if
a
.
Kind
()
!=
b
.
Kind
() {
if
a
.
Kind
()
==
reflect
.
Invalid
{
if
!
b
.
IsNil
() {
return
d
.
diff
(
path
,
reflect
.
ValueOf
(
nil
),
reflect
.
Indirect
(
b
),
parent
)
}
d
.
cl
.
Add
(
CREATE
,
path
,
nil
,
exportInterface
(
b
),
parent
)
return
nil
}
if
b
.
Kind
()
==
reflect
.
Invalid
{
if
!
a
.
IsNil
() {
return
d
.
diff
(
path
,
reflect
.
Indirect
(
a
),
reflect
.
ValueOf
(
nil
),
parent
)
}
d
.
cl
.
Add
(
DELETE
,
path
,
exportInterface
(
a
),
nil
,
parent
)
return
nil
}
return
ErrTypeMismatch
}
if
a
.
IsNil
()
&&
b
.
IsNil
() {
return
nil
}
if
a
.
IsNil
() {
d
.
cl
.
Add
(
UPDATE
,
path
,
nil
,
exportInterface
(
b
),
parent
)
return
nil
}
if
b
.
IsNil
() {
d
.
cl
.
Add
(
UPDATE
,
path
,
exportInterface
(
a
),
nil
,
parent
)
return
nil
}
return
d
.
diff
(
path
,
reflect
.
Indirect
(
a
),
reflect
.
Indirect
(
b
),
parent
)
}
func
exportInterface
(
v
reflect.
Value
)
interface
{} {
if
!
v
.
CanInterface
() {
flagTmp
:=
(
*
uintptr
)(
unsafe
.
Pointer
(
uintptr
(
unsafe
.
Pointer
(
&
v
))
+
2
*
unsafe
.
Sizeof
(
uintptr
(
0
))))
*
flagTmp
=
(
*
flagTmp
)
&
(
^
isExportFlag
)
}
return
v
.
Interface
()
}
Back
|
FazBrowse Home
|
New Git URL