/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ignite.internal.processors.cache.database.tree.io;
/**
* Registry for IO versions.
*/
public final class IOVersions<V extends PageIO> {
/** */
private final V[] vers;
/** */
private final int type;
/** */
private final V latest;
/**
* @param vers Versions.
*/
@SafeVarargs
public IOVersions(V... vers) {
assert vers != null;
assert vers.length > 0;
this.vers = vers;
this.type = vers[0].getType();
latest = vers[vers.length - 1];
assert checkVersions();
}
/**
* @return Type.
*/
public int getType() {
return type;
}
/**
* @return {@code true} If versions are correct.
*/
private boolean checkVersions() {
for (int i = 0; i < vers.length; i++) {
V v = vers[i];
if (v.getType() != type || v.getVersion() != i + 1)
return false;
}
return true;
}
/**
* @return Latest IO version.
*/
public V latest() {
return latest;
}
/**
* @param ver Version.
* @return IO.
*/
public V forVersion(int ver) {
return vers[ver - 1];
}
/**
* @param pageAddr Page address.
* @return IO.
*/
public V forPage(long pageAddr) {
int ver = PageIO.getVersion(pageAddr);
V res = forVersion(ver);
assert res.getType() == PageIO.getType(pageAddr) : "resType=" + res.getType() +
", pageType=" + PageIO.getType(pageAddr);
return res;
}
}