2 * Free Telco Dictionary
3 * Copyright © 2013 František Kučera (frantovo.cz)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, version 3 of the License.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 package cz.frantovo.telco.dictionary;
19 import java.io.DataOutputStream;
20 import java.io.IOException;
21 import java.nio.charset.StandardCharsets;
22 import java.util.Objects;
25 * Represents one item in StarDict index file (.idx)
26 * which links the term and its position and length in data file (.dict)
28 * @author Ing. František Kučera (frantovo.cz)
30 public class IndexEntry implements Comparable<IndexEntry> {
37 public IndexEntry(String name, long offset, long length) {
43 public void serialize(DataOutputStream indexOutputStream) throws IOException {
44 indexOutputStream.write(name.getBytes(StandardCharsets.UTF_8));
45 indexOutputStream.write(0);
46 indexOutputStream.writeInt((int) offset); // unsigned int 32
47 indexOutputStream.writeInt((int) length); // unsigned int 32
50 public void setOrdinal(long ordinal) {
51 this.ordinal = ordinal;
54 public long getOrdinal() {
59 public int compareTo(IndexEntry o) {
60 int nameDiff = name.compareTo(o.name);
62 int offsetDiff = ((Long) offset).compareTo(o.offset);
63 if (offsetDiff == 0) {
64 return ((Long) length).compareTo(o.length);
74 public boolean equals(Object o) {
75 return o instanceof IndexEntry && compareTo((IndexEntry) o) == 0;
79 public int hashCode() {
81 hash = 53 * hash + Objects.hashCode(this.name);
82 hash = 53 * hash + (int) (this.offset ^ (this.offset >>> 32));
83 hash = 53 * hash + (int) (this.length ^ (this.length >>> 32));