Skip to content

Commit 319d62e

Browse files
committed
Hashable
1 parent 8751702 commit 319d62e

File tree

4 files changed

+41
-25
lines changed

4 files changed

+41
-25
lines changed

SwiftDraw/DOM.Filter.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ extension DOM {
4141
self.effects = []
4242
}
4343

44-
enum Effect: Equatable {
44+
enum Effect: Hashable {
4545
case gaussianBlur(stdDeviation: DOM.Float)
4646
}
4747
}

SwiftDraw/LayerTree.Image.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@
3232
import Foundation
3333

3434
extension LayerTree {
35-
struct Image: Equatable {
35+
struct Image: Hashable {
3636

3737
var bitmap: Bitmap
3838
var origin: Point = .zero
3939
var width: LayerTree.Float?
4040
var height: LayerTree.Float?
4141

42-
enum Bitmap: Equatable {
42+
enum Bitmap: Hashable {
4343
case jpeg(Data)
4444
case png(Data)
4545
}

SwiftDraw/LayerTree.Layer.swift

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
//
2828

2929
extension LayerTree {
30-
final class Layer: Equatable {
30+
final class Layer: Hashable {
3131
var `class`: String? = nil
3232
var contents: [Contents] = []
3333
var opacity: Float = 1.0
@@ -37,7 +37,7 @@ extension LayerTree {
3737
var mask: Layer?
3838
var filters: [Filter] = []
3939

40-
enum Contents: Equatable {
40+
enum Contents: Hashable {
4141
case shape(Shape, StrokeAttributes, FillAttributes)
4242
case image(Image)
4343
case text(String, Point, TextAttributes)
@@ -72,24 +72,35 @@ extension LayerTree {
7272
return first
7373
}
7474

75+
func hash(into hasher: inout Hasher) {
76+
`class`.hash(into: &hasher)
77+
opacity.hash(into: &hasher)
78+
transform.hash(into: &hasher)
79+
clip.hash(into: &hasher)
80+
mask.hash(into: &hasher)
81+
filters.hash(into: &hasher)
82+
}
83+
7584
static func ==(lhs: Layer, rhs: Layer) -> Bool {
76-
return lhs.contents == rhs.contents &&
85+
return lhs.class == rhs.class &&
86+
lhs.contents == rhs.contents &&
7787
lhs.opacity == rhs.opacity &&
7888
lhs.transform == rhs.transform &&
7989
lhs.clip == rhs.clip &&
90+
lhs.clipRule == rhs.clipRule &&
8091
lhs.mask == rhs.mask &&
8192
lhs.filters == rhs.filters
8293
}
8394
}
8495

85-
struct StrokeAttributes: Equatable {
96+
struct StrokeAttributes: Hashable {
8697
var color: Stroke
8798
var width: Float
8899
var cap: LineCap
89100
var join: LineJoin
90101
var miterLimit: Float
91102

92-
enum Stroke: Equatable {
103+
enum Stroke: Hashable {
93104
case color(Color)
94105
case linearGradient(LinearGradient)
95106
case radialGradient(RadialGradient)
@@ -98,7 +109,7 @@ extension LayerTree {
98109
}
99110
}
100111

101-
struct FillAttributes: Equatable {
112+
struct FillAttributes: Hashable {
102113
var fill: Fill = .color(.none)
103114
var opacity: Float = 1.0
104115
var rule: FillRule
@@ -126,7 +137,7 @@ extension LayerTree {
126137
self.opacity = opacity
127138
}
128139

129-
enum Fill: Equatable {
140+
enum Fill: Hashable {
130141
case color(Color)
131142
case pattern(Pattern)
132143
case linearGradient(LinearGradient)
@@ -136,7 +147,7 @@ extension LayerTree {
136147
}
137148
}
138149

139-
struct TextAttributes: Equatable {
150+
struct TextAttributes: Hashable {
140151
var color: Color
141152
var fontName: String
142153
var size: Float

SwiftDraw/LayerTree.Pattern.swift

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,24 @@
3030
//
3131

3232
extension LayerTree {
33-
34-
final class Pattern: Equatable {
35-
36-
var frame: LayerTree.Rect
37-
var contents: [LayerTree.Layer.Contents]
38-
39-
init(frame: LayerTree.Rect) {
40-
self.frame = frame
41-
self.contents = []
42-
}
43-
44-
static func == (lhs: LayerTree.Pattern, rhs: LayerTree.Pattern) -> Bool {
45-
return lhs.contents == rhs.contents
33+
34+
final class Pattern: Hashable {
35+
36+
var frame: LayerTree.Rect
37+
var contents: [LayerTree.Layer.Contents]
38+
39+
init(frame: LayerTree.Rect) {
40+
self.frame = frame
41+
self.contents = []
42+
}
43+
44+
func hash(into hasher: inout Hasher) {
45+
frame.hash(into: &hasher)
46+
contents.hash(into: &hasher)
47+
}
48+
49+
static func == (lhs: LayerTree.Pattern, rhs: LayerTree.Pattern) -> Bool {
50+
return lhs.frame == rhs.frame && lhs.contents == rhs.contents
51+
}
4652
}
47-
}
4853
}

0 commit comments

Comments
 (0)