diff -r c63bdf53a1a7 -r 44839fbb20db test/hotspot/jtreg/vmTestbase/nsk/share/Denotation.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/Denotation.java Mon Apr 30 18:10:24 2018 -0700 @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package nsk.share; + +import java.util.*; + +/** + * Denotation implies a pair of algorithms for naming and + * indexing of some objects. + * + *
No matter what kind of objects, just make sure that: + *
The notions of indeces equality and names equivalence + * are formalized by the methods equality() and + * equivalence() correspondingly. + * + *
For better understanding of Denotation, you may want to + * see the TreeNodesDenotation class as an implementation example. + * + * @see #equality(int[],int[]) + * @see #equivalence(String,String) + * @see TreeNodesDenotation + */ +abstract public class Denotation { + /** + * Check if the name is legal, and return the + * numeric index for that object denoted by the given + * name. + * + * @throws IllegalArgumentException If the name + * is illegal. + */ + abstract public int[] indexFor(String name); + + /** + * Check if the index[] is legal, and return + * a symbolic name for the object denoted by the given + * index[]. + * + * @throws IllegalArgumentException If the index[] + * is illegal. + */ + abstract public String nameFor(int[] index); + + /** + * Re-call to nameFor(int[]) with the 1-element + * array {i} as the index argument. + * + * @see #nameFor(int[]) + */ + public String nameFor(int i) { + return nameFor(new int[] { i }); + } + + /** + * Re-call to nameFor(int[]) with the 2-elements + * array {i0,i1} as the index argument. + * + * @see #nameFor(int[]) + */ + public String nameFor(int i0, int i1) { + return nameFor(new int[] {i0, i1}); + } + + /** + * Re-call to nameFor(int[]) with the 3-elements + * array {i0,i1,i2} as the index argument. + * + * @see #nameFor(int[]) + */ + public String nameFor(int i0, int i1, int i2) { + return nameFor(new int[] {i0, i1, i2}); + } + + /** + * Indeces equality means equality of objects they denote. + * + *
Indeces index1[] and index2[] are + * equal, if they are equal as int[] arrays. But, + * there is no index equal to null; particularly, + * null is not equal to itself. + * + * @see Arrays#equals(int[],int[]) + */ + public boolean equality(int[] index1, int[] index2) { + if (index1 == null || index2 == null) + return false; + return Arrays.equals(index1,index2); + } + + /** + * Names equivalence means equality of objects they denote. + * + *
Strings name1 and name2 are equivalent, + * if correspondent indeces are equal. There is no name + * equivalent to null; particularly, null is + * not equivalent to itself. + * + * @see #equality(int[],int[]) + */ + public boolean equivalence(String name1, String name2) { + if (name1 == null || name2 == null) + return false; + return equality(indexFor(name1),indexFor(name2)); + } + + /** + * Dummy constructor. + */ + protected Denotation() { + } +}