Libraryless. Click here for Pure Java version (2723L/17K).
1 | // fields: type + name |
2 | sS tok_genEqualsAndHashCode(S className, LPairS fields, O... _) {
|
3 | optPar S qualifier = ""; |
4 | optPar bool flexEq; |
5 | S argName = "o"; |
6 | while (pairsB(fields).contains(argName)) argName = "_" + argName; |
7 | StringBuilder buf = new("\n\npublic bool equals(O \*argName*/) {\n");
|
8 | S instanceCheck = flexEq |
9 | ? "_getClass(\*argName*/) == getClass()" |
10 | : "\*argName*/ instanceof " + qualifier + className; |
11 | if (empty(fields)) |
12 | buf.append("ret \*instanceCheck*/;\n");
|
13 | else {
|
14 | S x = makeVar(); |
15 | buf.append("if (!(" + instanceCheck + [[)) false;
|
16 | ]] + className + " \*x*/ = cast " + argName + [[; |
17 | ret ]] + join(" && ", map(fields, func(PairS p) -> S {
|
18 | tok_isPrimitiveType(p.a) |
19 | ? p.b + " == \*x*/." + p.b |
20 | : "eq(" + p.b + ", \*x*/." + p.b + ")"
|
21 | })) + ";\n"); |
22 | } |
23 | buf.append("}\n");
|
24 | |
25 | buf.append([[ |
26 | public int hashCode() {
|
27 | int h = ]] + hashCode(className) + [[; |
28 | ]] + concatMap_strings(fields, func(Pair<S> p) {
|
29 | "h = boostHashCombine(h, _hashCode(" + p.b + [[));
|
30 | ]]}) + [[ret h; |
31 | } |
32 | ]]); |
33 | ret str(buf); |
34 | } |
download show line numbers debug dex old transpilations
Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, irmadwmeruwu, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
| Snippet ID: | #1017037 |
| Snippet name: | tok_genEqualsAndHashCode |
| Eternal ID of this version: | #1017037/18 |
| Text MD5: | b379d269d52bb3aed4bca875d2c6804d |
| Transpilation MD5: | 15fc7a6f64c73ee20641468e4c742e03 |
| Author: | stefan |
| Category: | javax / transpiling |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2020-07-24 15:13:56 |
| Source code size: | 1123 bytes / 34 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 689 / 884 |
| Version history: | 17 change(s) |
| Referenced in: | [show references] |