GlueGen: src/java/com/jogamp/gluegen/cgram/types/TypeComparator.java Source File

GlueGen v2.6.0 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
32 public 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 */
41 int hashCodeSemantics();
42
43 /**
44 * Semantic equality test for Types exclusive its given {@link #getName() name}.
45 * @see #hashCodeSemantics()
46 */
47 boolean equalSemantics(final SemanticEqualityOp arg);
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}
com.jogamp.gluegen.cgram.types.TypeComparator
Definition: TypeComparator.java:32
com.jogamp.gluegen.cgram.types.AliasedSymbol
Supports symbol aliasing, i.e.
Definition: AliasedSymbol.java:37
com.jogamp.gluegen.cgram.types.TypeComparator.AliasedSemanticSymbol
Supports common interface for SemanticEqualityOp and AliasedSymbol.
Definition: TypeComparator.java:52
com.jogamp.gluegen.cgram.types.TypeComparator.SemanticEqualityOp
Supports semantic equality and hash functions for types.
Definition: TypeComparator.java:36
com.jogamp.gluegen.cgram.types.TypeComparator.SemanticEqualityOp.hashCodeSemantics
int hashCodeSemantics()
Semantic hashcode for Types exclusive its given name.
com.jogamp.gluegen.cgram.types.TypeComparator.SemanticEqualityOp.equalSemantics
boolean equalSemantics(final SemanticEqualityOp arg)
Semantic equality test for Types exclusive its given name.