[
https://issues.apache.org/jira/browse/LUCENENET-481?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13238661#comment-13238661
]
Christopher Currens commented on LUCENENET-481:
-----------------------------------------------
If you're talking about the termComparator, that wasn't made generic until 3.1.
The comparator in 3.0.3 can't be ported the way it is anyway because of Java's
type system, but I just want to make sure you're porting 3.0.3 to keep
everything in line with the rest of the .NET versions. You'll find that the
3.x version in java uses a few other additions to the main lucene library that
aren't yet available in 3.0.3.
This problem should be easily solved without reflection. The comparator used
basically requires that it be a {{KeyValuePair<TKey, TValue>}}, or more
specifically, a {{KeyValuePair<string, TValue>}}. There are actually only 2
different types that uses that termComparator: {{KeyValuePair<string,
ArrayIntList>[]}} and {{KeyValuePair<string,Info>[]}}. An exception to that is
the {{private static sort(Dictionary<K,V>)}} method, but that can be solved
with a static method, a type constraint (which is already implied in the java
version) and some type inference (as a nicety). I had ported most of this at
one point (somewhere on my home computer), and if memory serves me correctly, I
think this is how I solved this problem.
You can use this if you want:
{code}
class KvpComparer
{
public static int Comparer<TKey, TValue>(KeyValuePair<TKey, TValue> x,
KeyValuePair<TKey, TValue> y)
where TKey : IComparable<TKey>
{
if (x.Equals(y)) return 0;
return x.Key.CompareTo(y.Key);
}
}
sealed class KvpComparer<T> : KvpComparer, IComparer<KeyValuePair<string, T>>
{
public int Compare(KeyValuePair<string, T> x, KeyValuePair<string, T> y)
{
return Comparer(x, y);
}
}
{code}
You can create the two instances you need for the {{<string,Info>}} and
{{<string,ArrayIntList>}} types. For the {{Map.Entry<K,V>[] sort(HashMap<K,V>
map}} method, constrain {{K}} to {{IComparable<K>}}, and then you can use it
like {{Array.Sort(entries, KvpComparer.Compare)}}, which is nice because it's
one less object you need to create (or more) for each type passed into sort.
Alternatively, since the {{sort}} method is private, and only uses those two
types, you can just change the signature and pass in one of the comparers
instead, removing the base class from the equation.
> Port Contrib.MemoryIndex
> ------------------------
>
> Key: LUCENENET-481
> URL: https://issues.apache.org/jira/browse/LUCENENET-481
> Project: Lucene.Net
> Issue Type: New Feature
> Affects Versions: Lucene.Net 3.0.3
> Reporter: Christopher Currens
>
> We need to port MemoryIndex from contrib, if we want to be able to port a few
> other contrib libraries.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira