/*
* 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.
*/
using System;
using System.Runtime.InteropServices;
namespace Lucene.Net.Documents
{
/// Provides information about what should be done with this Field
///
///
///
//Replace with an enumerated type in 1.5
[Serializable]
public sealed class FieldSelectorResult
{
/// Load this {@link Field} every time the {@link Document} is loaded, reading in the data as it is encounterd.
/// {@link Document#GetField(String)} and {@link Document#GetFieldable(String)} should not return null.
///
/// {@link Document#Add(Fieldable)} should be called by the Reader.
///
[NonSerialized]
public static readonly FieldSelectorResult LOAD = new FieldSelectorResult(0);
/// Lazily load this {@link Field}. This means the {@link Field} is valid, but it may not actually contain its data until
/// invoked. {@link Document#GetField(String)} SHOULD NOT BE USED. {@link Document#GetFieldable(String)} is safe to use and should
/// return a valid instance of a {@link Fieldable}.
///
/// {@link Document#Add(Fieldable)} should be called by the Reader.
///
[NonSerialized]
public static readonly FieldSelectorResult LAZY_LOAD = new FieldSelectorResult(1);
/// Do not load the {@link Field}. {@link Document#GetField(String)} and {@link Document#GetFieldable(String)} should return null.
/// {@link Document#Add(Fieldable)} is not called.
///
/// {@link Document#Add(Fieldable)} should not be called by the Reader.
///
[NonSerialized]
public static readonly FieldSelectorResult NO_LOAD = new FieldSelectorResult(2);
/// Load this field as in the {@link #LOAD} case, but immediately return from {@link Field} loading for the {@link Document}. Thus, the
/// Document may not have its complete set of Fields. {@link Document#GetField(String)} and {@link Document#GetFieldable(String)} should
/// both be valid for this {@link Field}
///
/// {@link Document#Add(Fieldable)} should be called by the Reader.
///
[NonSerialized]
public static readonly FieldSelectorResult LOAD_AND_BREAK = new FieldSelectorResult(3);
/// Behaves much like {@link #LOAD} but does not uncompress any compressed data. This is used for internal purposes.
/// {@link Document#GetField(String)} and {@link Document#GetFieldable(String)} should not return null.
///
/// {@link Document#Add(Fieldable)} should be called by the Reader.
///
[NonSerialized]
public static readonly FieldSelectorResult LOAD_FOR_MERGE = new FieldSelectorResult(4);
/// Expert: Load the size of this {@link Field} rather than its value.
/// Size is measured as number of bytes required to store the field == bytes for a binary or any compressed value, and 2*chars for a String value.
/// The size is stored as a binary value, represented as an int in a byte[], with the higher order byte first in [0]
///
[NonSerialized]
public static readonly FieldSelectorResult SIZE = new FieldSelectorResult(5);
/// Expert: Like {@link #SIZE} but immediately break from the field loading loop, i.e., stop loading further fields, after the size is loaded
[NonSerialized]
public static readonly FieldSelectorResult SIZE_AND_BREAK = new FieldSelectorResult(6);
private int id;
private FieldSelectorResult(int id)
{
this.id = id;
}
public override bool Equals(System.Object o)
{
if (this == o)
return true;
if (o == null || GetType() != o.GetType())
return false;
FieldSelectorResult that = (FieldSelectorResult) o;
if (id != that.id)
return false;
return true;
}
public override int GetHashCode()
{
return id;
}
}
}