/// <summary> /// 定义一个全局访问点,设置为静态方法 /// 则在类的外部便无需实例化就可以调用该方法 /// </summary> /// <returns>返回单例fieldsInstance</returns> public static Fields GetInstance() { //第一重 singleton == null if(fieldsInstance==null) { lock (syncObj) { //第二重 singleton == null if (fieldsInstance == null) { fieldsInstance = new Fields(); } } } return fieldsInstance; }
/// <summary> /// checks that top-level statistics on Fields are the same /// </summary> public void AssertFieldStatisticsEquals(string info, Fields leftFields, Fields rightFields) { if (leftFields.Size != -1 && rightFields.Size != -1) { Assert.AreEqual(leftFields.Size, rightFields.Size, info); } }
/// <summary> /// Fields api equivalency /// </summary> public void AssertFieldsEquals(string info, IndexReader leftReader, Fields leftFields, Fields rightFields, bool deep) { // Fields could be null if there are no postings, // but then it must be null for both if (leftFields == null || rightFields == null) { Assert.IsNull(leftFields, info); Assert.IsNull(rightFields, info); return; } AssertFieldStatisticsEquals(info, leftFields, rightFields); IEnumerator<string> leftEnum = leftFields.GetEnumerator(); IEnumerator<string> rightEnum = rightFields.GetEnumerator(); while (leftEnum.MoveNext()) { string field = leftEnum.Current; rightEnum.MoveNext(); Assert.AreEqual(field, rightEnum.Current, info); AssertTermsEquals(info, leftReader, leftFields.Terms(field), rightFields.Terms(field), deep); } Assert.IsFalse(rightEnum.MoveNext()); }