EMMA Coverage Report (generated Wed Jun 28 22:15:27 PDT 2006)
[all classes][org.apache.derby.iapi.store.access]

COVERAGE SUMMARY FOR SOURCE FILE [KeyHasher.java]

nameclass, %method, %block, %line, %
KeyHasher.java100% (1/1)83%  (5/6)92%  (104/113)88%  (22/25)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class KeyHasher100% (1/1)83%  (5/6)92%  (104/113)88%  (22/25)
KeyHasher (int): void 100% (1/1)100% (7/7)100% (3/3)
buildHashKey (Object [], int []): Object 100% (1/1)100% (34/34)100% (6/6)
equals (Object): boolean 100% (1/1)90%  (36/40)78%  (7/9)
getObject (int): Object 0%   (0/1)0%   (0/5)0%   (0/1)
hashCode (): int 100% (1/1)100% (21/21)100% (4/4)
setObject (int, Object): void 100% (1/1)100% (6/6)100% (2/2)

1/*
2 
3   Derby - Class org.apache.derby.iapi.store.access.KeyHasher
4 
5   Copyright 1999, 2004 The Apache Software Foundation or its licensors, as applicable.
6 
7   Licensed under the Apache License, Version 2.0 (the "License");
8   you may not use this file except in compliance with the License.
9   You may obtain a copy of the License at
10 
11      http://www.apache.org/licenses/LICENSE-2.0
12 
13   Unless required by applicable law or agreed to in writing, software
14   distributed under the License is distributed on an "AS IS" BASIS,
15   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   See the License for the specific language governing permissions and
17   limitations under the License.
18 
19 */
20 
21package org.apache.derby.iapi.store.access;
22 
23import org.apache.derby.iapi.services.sanity.SanityManager;
24 
25/**
26        Provides the ability to hash on multiple objects.
27*/
28public class KeyHasher 
29{
30        
31        private final Object[] objects;
32 
33        public KeyHasher(int size)
34        {
35                objects = new Object[size];
36        }
37 
38        /**
39         * Set array element at the specified index to the specified object.
40         *
41         * @param index                The specified index
42         * @param object        The specified object.
43         */
44        public void setObject(int index, Object object)
45        {
46                objects[index] = object;
47        }
48 
49        /**
50         * Get the object stored at the specified index.
51         *
52         * @param index        The specified index.
53         *
54         * @return The object stored in the array element.
55         */
56        public Object getObject(int index)
57        {
58                return objects[index];
59        }
60 
61        /**
62         * Static method to return the object to hash on.
63         * (Object stored in specifed array, if only a single
64         * object, otherwise a KeyHasher wrapping the
65         * objects to hash on.
66         * (NOTE: We optimize for in-memory hash tables, hence
67         * we only create a wrapper when needed.)
68         *
69         * @param objects        The array of objects to consider
70         * @param indexes        The indexes of the objects in the hash key.
71         *
72         * @return        The object to hash on.
73         */
74        public static Object buildHashKey(Object[] objects,
75                                                                          int[] indexes)
76        {
77                // Hash on single object
78                if (indexes.length == 1)
79                {
80                        return objects[indexes[0]];
81                }
82 
83                // Hash on multiple objects
84                KeyHasher mh = new KeyHasher(indexes.length);
85                for (int index = 0; index < indexes.length; index++)
86                {
87                        mh.setObject(index, objects[indexes[index]]);
88                }
89                return mh;
90        }
91 
92        /*
93        ** Methods from java.lang.Object
94        */
95 
96        public int hashCode()
97        {
98                int retval = 0;
99                for (int index = 0; index < objects.length; index++)
100                {
101                        retval += objects[index].hashCode();
102                }
103 
104                return retval;
105        }
106 
107        public boolean equals(Object obj)
108        {
109                if (!(obj instanceof KeyHasher))
110                        return false;
111 
112                KeyHasher mh = (KeyHasher) obj;
113 
114                if (mh.objects.length != objects.length)
115                        return false;
116 
117                for (int index = 0; index < objects.length; index++)
118                {
119                        if (! (mh.objects[index].equals(objects[index])))
120                        {
121                                return false;
122                        }
123                }
124 
125                return true;
126        }
127}

[all classes][org.apache.derby.iapi.store.access]
EMMA 2.0.5312 (C) Vladimir Roubtsov