blob: 951cdc327ff52fcfbc548de18e43ce2be8330018 (
plain)
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
|
struct _String {
u8[] cs;
new _String={ u8[] b -> cs=b; };
int _hashCode;
};
val _equals = { !_String !self, !_String s ->
if( self == s ) return true;
if( self.cs# != s.cs# ) return false;
for( int i=0; i< self.cs#; i++ )
if( self.cs[i] != s.cs[i] )
return false;
return true;
};
val _hashCode = { !_String self ->
self._hashCode
? self._hashCode
: (self._hashCode = _hashCodeString(self));
};
val _hashCodeString = { !_String self ->
int hash=0;
if( self.cs ) {
for( int i=0; i< self.cs#; i++ )
hash = hash*31 + self.cs[i];
}
if( !hash ) hash = 123456789;
return hash;
};
!_String !s = new _String(new u8[17]);
s.cs[0] = 67; // C
s.cs[1] = 108; // l
_hashCode(s);
|