GlueGen v2.6.0-rc-20250712
GlueGen, Native Binding Generator for Java™ (public API).
TypeComparator.java
Go to the documentation of this file.
1/**
2 * Copyright 2015 JogAmp Community. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without modification, are
5 * permitted provided that the following conditions are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright notice, this list of
8 * conditions and the following disclaimer.
9 *
10 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
11 * of conditions and the following disclaimer in the documentation and/or other materials
12 * provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
15 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
21 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
22 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 *
24 * The views and conclusions contained in the software and documentation are those of the
25 * authors and should not be interpreted as representing official policies, either expressed
26 * or implied, of JogAmp Community.
27 */
28package com.jogamp.gluegen.cgram.types;
29
30import java.util.List;
31
32public class TypeComparator {
33 /**
34 * Supports semantic equality and hash functions for types.
35 */
36 public static interface SemanticEqualityOp {
37 /**
38 * Semantic hashcode for Types exclusive its given {@link #getName() name}.
39 * @see #equalSemantics(SemanticEqualityOp)
40 */
42
43 /**
44 * Semantic equality test for Types exclusive its given {@link #getName() name}.
45 * @see #hashCodeSemantics()
46 */
48 }
49 /**
50 * Supports common interface for {@link SemanticEqualityOp} and {@link AliasedSymbol}.
51 */
52 public static interface AliasedSemanticSymbol extends AliasedSymbol, SemanticEqualityOp { };
53
54 /** Helper routine for list equality comparison*/
55 static <C> boolean listsEqual(final List<C> a, final List<C> b) {
56 if( a == null ) {
57 if( null != b ) {
58 return false;
59 } else {
60 return true; // elements equal, i.e. both null
61 }
62 }
63 if( b != null && a.size() == b.size() ) {
64 final int count = a.size();
65 for(int i=0; i<count; i++) {
66 final C ac = a.get(i);
67 final C bc = b.get(i);
68 if( null == ac ) {
69 if( null != bc ) {
70 return false;
71 } else {
72 continue; // elements equal, i.e. both null
73 }
74 }
75 if( !ac.equals(bc) ) {
76 return false;
77 }
78 }
79 return true;
80 }
81 return false;
82 }
83
84 /** Helper routine for list hashCode */
85 static <C extends SemanticEqualityOp> int listsHashCode(final List<C> a) {
86 if( a == null ) {
87 return 0;
88 } else {
89 final int count = a.size();
90 int hash = 31;
91 for(int i=0; i<count; i++) {
92 final C ac = a.get(i);
93 hash = ((hash << 5) - hash) + ( null != ac ? ac.hashCode() : 0 );
94 }
95 return hash;
96 }
97 }
98
99 /** Helper routine for list semantic equality comparison*/
100 static <C extends SemanticEqualityOp> boolean listsEqualSemantics(final List<C> a, final List<C> b) {
101 if( a == null ) {
102 if( null != b ) {
103 return false;
104 } else {
105 return true; // elements equal, i.e. both null
106 }
107 }
108 if( b != null && a.size() == b.size() ) {
109 final int count = a.size();
110 for(int i=0; i<count; i++) {
111 final C ac = a.get(i);
112 final C bc = b.get(i);
113 if( null == ac ) {
114 if( null != bc ) {
115 return false;
116 } else {
117 continue; // elements equal, i.e. both null
118 }
119 }
120 if( !ac.equalSemantics(bc) ) {
121 return false;
122 }
123 }
124 return true;
125 }
126 return false;
127 }
128
129 /** Helper routine for list hashCode */
130 static <C extends SemanticEqualityOp> int listsHashCodeSemantics(final List<C> a) {
131 if( a == null ) {
132 return 0;
133 } else {
134 final int count = a.size();
135 int hash = 31;
136 for(int i=0; i<count; i++) {
137 final C ac = a.get(i);
138 hash = ((hash << 5) - hash) + ( null != ac ? ac.hashCodeSemantics() : 0 );
139 }
140 return hash;
141 }
142 }
143}
Supports common interface for SemanticEqualityOp and AliasedSymbol.
Supports semantic equality and hash functions for types.
int hashCodeSemantics()
Semantic hashcode for Types exclusive its given name.
boolean equalSemantics(final SemanticEqualityOp arg)
Semantic equality test for Types exclusive its given name.