1 package net.obsearch.result;
2 import net.obsearch.AbstractOBResult;
3 import net.obsearch.ob.OBLong;
4
5 /*
6 OBSearch: a distributed similarity search engine
7 This project is to similarity search what 'bit-torrent' is to downloads.
8 Copyright (C) 2007 Arnoldo Jose Muller Molina
9
10 This program is free software: you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation, either version 3 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>.
22 */
23 /**
24 * This class is used to store a single match result. A single result consists
25 * of the object found, the distance of this object with the query and an
26 * internal id.
27 *
28 * @author Arnoldo Jose Muller Molina
29 * @since 0.7
30 */
31
32
33 public final class OBResultLong<O> extends AbstractOBResult<O> {
34
35
36 /**
37 * Distance of the object found and the query.
38 */
39 protected long distance;
40
41 /**
42 * Default constructor. Used mostly to minimize the amount of object
43 * creations.
44 */
45 public OBResultLong(){
46 }
47
48 /**
49 * Create a new OBResultLong.
50 * @param object
51 * the result found.
52 * @param id
53 * The internal id of the result.
54 * @param distance
55 * Distance of the result and the original query.
56 */
57 public OBResultLong(O object, long id, long distance){
58
59 super(object,id);
60 this.distance = distance;
61
62 }
63
64 /**
65 * @return The distance of the result and the original query.
66 */
67 public final long getDistance(){
68 return distance;
69 }
70
71 /**
72 * Sets the distance to a new value x.
73 * @param x
74 * The new value to set.
75 */
76 public final void setDistance(long x){
77 this.distance = x;
78 }
79
80 /**
81 * We implement the interface comparable so we provide this method. The
82 * only difference is that we return bigger objects first. (The
83 * comparable contract is multiplied by -1)
84 * @param o
85 * The object that will be compared.
86 * @return 1 if this object is smaller than o 0 if this object is equal
87 * than o -1 if this object is greater than o
88 */
89 public int compareTo(Object o) {
90 assert o instanceof OBResultLong;
91 OBResultLong<O> comp = (OBResultLong<O>) o;
92 int res = 0;
93
94
95 if (distance < comp.distance) {
96 res = 1;
97 } else if (distance > comp.distance) {
98 res = -1;
99 }
100 return res;
101 }
102
103 /**
104 * @return the hash code of this object.
105 */
106 /*public int hashCode(){
107 return (int) distance;
108 }*/
109
110
111
112 /**
113 * We do not care about the object itself, just that both objects are at
114 * the same distance from the query.
115 * @return true if both distances are the same.
116 */
117 /*public boolean equals(Object obj){
118 OBResultLong<O> comp = (OBResultLong<O>) obj;
119 // a result object is the same if the distance is the same
120 // we do not care about the id.
121 return distance == comp.distance;
122 }*/
123
124 /**
125 * Return a human readable representation of the object.
126 * @return a human readable representation of the object.
127 */
128 public String toString(){
129 return "<" + id + " " + distance + ">";
130 }
131 }
132
133