blob: 61539ac379183638dbd7c1c10d53293a34794b47 [file] [log] [blame]
/*
* 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.jackrabbit.oak.segment.file.tar.binaries;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
/**
* An index of binary references.
*/
public class BinaryReferencesIndex {
/**
* A consumer of entries from a binary references index.
*/
public interface EntryConsumer {
/**
* Consume an entry from a binary references index.
*
* @param generation The generation of the segment containing the binary
* reference.
* @param full The full generation of the segment containing the
* binary reference.
* @param compacted {@code true} if the segment was created by a
* compaction operation.
* @param segment The identifier of the segment containing the binary
* reference.
* @param reference The binary reference.
*/
void consume(int generation, int full, boolean compacted, UUID segment, String reference);
}
private final Map<Generation, Map<UUID, Set<String>>> references;
BinaryReferencesIndex(Map<Generation, Map<UUID, Set<String>>> references) {
this.references = references;
}
/**
* Iterate over every entry in this index.
*
* @param consumer An instance of {@link EntryConsumer}.
*/
public void forEach(EntryConsumer consumer) {
references.forEach((generation, entries) -> {
entries.forEach((segment, references) -> {
references.forEach(reference -> {
consumer.consume(
generation.generation,
generation.full,
generation.compacted,
segment,
reference
);
});
});
});
}
}