/* * Copyright 2013 Hannes Janetzek * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * * This program is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later version. * * This program 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. */ package org.oscim.theme; import org.oscim.core.Tag; import org.oscim.core.TagSet; class MatchingCacheKey { int mHash; Tag[] mTags; MatchingCacheKey() { } MatchingCacheKey(MatchingCacheKey key) { mTags = key.mTags; mHash = key.mHash; } /** set temporary values for comparison */ boolean set(TagSet tags, MatchingCacheKey compare) { int numTags = tags.numTags; /* Test if tags are equal to previous query */ if (compare != null && numTags == compare.mTags.length) { int i = 0; for (; i < numTags; i++) { Tag t1 = tags.tags[i]; Tag t2 = compare.mTags[i]; if (!(t1 == t2 || (t1.key == t2.key && t1.value == t2.value))) break; } if (i == numTags) return true; } /* Clone tags as they belong to TileDataSource. * Also needed for comparison if previous tags * were equal. */ mTags = new Tag[numTags]; int result = 7; for (int i = 0; i < numTags; i++) { Tag t = tags.tags[i]; result = 31 * result + t.hashCode(); mTags[i] = t; } mHash = 31 * result; return false; } @Override public boolean equals(Object obj) { if (obj == null) return false; if (this == obj) return true; MatchingCacheKey other = (MatchingCacheKey) obj; int length = mTags.length; if (length != other.mTags.length) return false; for (int i = 0; i < length; i++) { Tag t1 = mTags[i]; Tag t2 = other.mTags[i]; if (!(t1 == t2 || (t1.key == t2.key && t1.value == t2.value))) return false; } return true; } @Override public int hashCode() { return mHash; } }