7
7
8
8
import dataclasses
9
9
import re
10
- from typing import Generator
10
+ from typing import Any , Generator
11
11
from pathlib import Path
12
12
13
13
from .progress_stats import ProgressStats
@@ -75,8 +75,8 @@ def printAsCsv(self):
75
75
print (f"{ self .name } ,{ self .vram :08X} ,{ self .size } " )
76
76
77
77
78
- def toJson (self ) -> dict :
79
- result = {
78
+ def toJson (self ) -> dict [ str , Any ] :
79
+ result : dict [ str , Any ] = {
80
80
"name" : self .name ,
81
81
"vram" : self .getVramStr (),
82
82
"size" : self .serializeSize (),
@@ -86,6 +86,16 @@ def toJson(self) -> dict:
86
86
return result
87
87
88
88
89
+ def __eq__ (self , other : object ) -> bool :
90
+ if not isinstance (other , Symbol ):
91
+ return False
92
+ return self .name == other .name and self .vram == other .vram
93
+
94
+ # https://stackoverflow.com/a/56915493/6292472
95
+ def __hash__ (self ):
96
+ return hash ((self .name , self .vram ))
97
+
98
+
89
99
@dataclasses .dataclass
90
100
class File :
91
101
filepath : Path
@@ -182,8 +192,8 @@ def printAsCsv(self, printVram: bool=True):
182
192
print (f"{ self .filepath } ,{ self .sectionType } ,{ symCount } ,{ maxSize } ,{ self .size } ,{ averageSize :0.2f} " )
183
193
184
194
185
- def toJson (self ) -> dict :
186
- fileDict : dict = {
195
+ def toJson (self ) -> dict [ str , Any ] :
196
+ fileDict : dict [ str , Any ] = {
187
197
"filepath" : str (self .filepath ),
188
198
"sectionType" : self .sectionType ,
189
199
"vram" : self .serializeVram (),
@@ -212,6 +222,15 @@ def __setitem__(self, index, sym: Symbol):
212
222
def __len__ (self ) -> int :
213
223
return len (self ._symbols )
214
224
225
+ def __eq__ (self , other : object ) -> bool :
226
+ if not isinstance (other , File ):
227
+ return False
228
+ return self .filepath == other .filepath
229
+
230
+ # https://stackoverflow.com/a/56915493/6292472
231
+ def __hash__ (self ):
232
+ return hash ((self .filepath ,))
233
+
215
234
216
235
@dataclasses .dataclass
217
236
class Segment :
@@ -314,8 +333,8 @@ def printSymbolsCsv(self):
314
333
return
315
334
316
335
317
- def toJson (self ) -> dict :
318
- segmentDict : dict = {
336
+ def toJson (self ) -> dict [ str , Any ] :
337
+ segmentDict : dict [ str , Any ] = {
319
338
"name" : self .name ,
320
339
"vram" : self .serializeVram (),
321
340
"size" : self .serializeSize (),
@@ -341,6 +360,15 @@ def __getitem__(self, index) -> File:
341
360
def __len__ (self ) -> int :
342
361
return len (self ._filesList )
343
362
363
+ def __eq__ (self , other : object ) -> bool :
364
+ if not isinstance (other , Segment ):
365
+ return False
366
+ return self .name == other .name and self .vram == other .vram and self .size == other .size and self .vrom == other .vrom
367
+
368
+ # https://stackoverflow.com/a/56915493/6292472
369
+ def __hash__ (self ):
370
+ return hash ((self .name , self .vram , self .size , self .vrom ))
371
+
344
372
345
373
class MapFile :
346
374
def __init__ (self ):
@@ -623,12 +651,12 @@ def printSymbolsCsv(self):
623
651
return
624
652
625
653
626
- def toJson (self ) -> dict :
654
+ def toJson (self ) -> dict [ str , Any ] :
627
655
segmentsList = []
628
656
for segment in self ._segmentsList :
629
657
segmentsList .append (segment .toJson ())
630
658
631
- result = {
659
+ result : dict [ str , Any ] = {
632
660
"segments" : segmentsList
633
661
}
634
662
return result
0 commit comments