All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fiftyone.mobile.detection.entities.stream.NodeV32 Maven / Gradle / Ivy

The newest version!
/* *********************************************************************
 * This Source Code Form is copyright of 51Degrees Mobile Experts Limited. 
 * Copyright © 2017 51Degrees Mobile Experts Limited, 5 Charlotte Close,
 * Caversham, Reading, Berkshire, United Kingdom RG4 7BY
 * 
 * This Source Code Form is the subject of the following patents and patent
 * applications, owned by 51Degrees Mobile Experts Limited of 5 Charlotte
 * Close, Caversham, Reading, Berkshire, United Kingdom RG4 7BY: 
 * European Patent No. 2871816;
 * European Patent Application No. 17184134.9;
 * United States Patent Nos. 9,332,086 and 9,350,823; and
 * United States Patent Application No. 15/686,066.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0.
 * 
 * If a copy of the MPL was not distributed with this file, You can obtain
 * one at http://mozilla.org/MPL/2.0/.
 * 
 * This Source Code Form is "Incompatible With Secondary Licenses", as
 * defined by the Mozilla Public License, v. 2.0.
 * ********************************************************************* */
package fiftyone.mobile.detection.entities.stream;

import fiftyone.mobile.detection.IndirectDataset;
import fiftyone.mobile.detection.factories.NodeFactoryShared;
import fiftyone.mobile.detection.readers.BinaryReader;
import fiftyone.properties.DetectionConstants;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Represents a Node which can be used with the Stream data set. NumericChidren 
 * and RankedSignatureIndexes are not loaded into memory when the entity is 
 * constructed, they're only loaded from the data source when requested.
 * 

* Objects of this class should not be created directly as they are part of the * internal logic. */ public class NodeV32 extends Node { /** * A list of all the signature indexes that relate to this node. */ @SuppressWarnings("VolatileArrayField") private volatile List rankedSignatureIndexes; /** * Constructs a new instance of NodeV32. * * @param dataSet The data set the node is contained within. * @param offset The offset in the data structure to the node. * @param reader Reader connected to the source data structure and * positioned to start reading. * @throws java.io.IOException if there was a problem accessing data file. */ public NodeV32(IndirectDataset dataSet, int offset, BinaryReader reader) throws IOException { super(dataSet, offset, reader); super.rankedSignatureCount = reader.readUInt16(); super.children = NodeFactoryShared.readNodeIndexesV32( dataSet, reader, (int)(offset + reader.getPos() - nodeStartStreamPosition), childrenCount); super.numericChildrenPosition = reader.getPos(); } /** * @return a list of all the signature indexes that relate to this node. * @throws java.io.IOException if there was a problem accessing data file. */ @Override @SuppressWarnings("DoubleCheckedLocking") public List getRankedSignatureIndexes() throws IOException { List localRankedSignatureIndexes = rankedSignatureIndexes; if (localRankedSignatureIndexes == null) { synchronized (this) { localRankedSignatureIndexes = rankedSignatureIndexes; if (localRankedSignatureIndexes == null) { rankedSignatureIndexes = localRankedSignatureIndexes = getRankedSignatureIndexesAsArray(); } } } return localRankedSignatureIndexes; } // private int getRankedSignatureIndexValue() throws IOException { BinaryReader reader = pool.getReader(); try { // Position the reader after the numeric children. reader.setPos(numericChildrenPosition + ( ( DetectionConstants.SIZE_OF_SHORT + DetectionConstants.SIZE_OF_INT ) * getNumericChildrenLength())); return reader.readInt32(); } finally { pool.release(reader); } } /** * Gets the ranked signature indexes array for the node. * * @return An array of length _rankedSignatureCount filled with ranked * signature indexes. */ private List getRankedSignatureIndexesAsArray() throws IOException { // RankedSignatureIndexes (RSI). List rsi = null; if (rankedSignatureCount == 0) { rsi = new ArrayList(0); } else { int rankedSignatureValue = getRankedSignatureIndexValue(); if (rankedSignatureCount == 1) { rsi = new ArrayList(); rsi.add(rankedSignatureValue); } else { rsi = dataSet.getNodeRankedSignatureIndexes().getRange( rankedSignatureValue, rankedSignatureCount); } } return rsi; } // }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy