This commit is contained in:
Matthias Mailänder
2014-02-09 18:25:33 +01:00
parent 35bf03aade
commit 6dc02c3b26

View File

@@ -15,8 +15,37 @@ using OpenRA.FileFormats;
namespace OpenRA namespace OpenRA
{ {
static class ListExts
{
public static int BinarySearchMany(this List<Actor> list, uint searchFor)
{
int start = 0;
int end = list.Count;
int mid = 0;
while (start != end)
{
mid = (start + end) / 2;
var c = list[mid].ActorID.CompareTo(searchFor);
if (c < 0)
start = mid + 1;
else
end = mid;
}
return start;
}
}
class TraitDictionary class TraitDictionary
{ {
// construct this delegate once.
static Func<Type, ITraitContainer> doCreateTraitContainer = CreateTraitContainer;
static ITraitContainer CreateTraitContainer(Type t)
{
return (ITraitContainer)typeof(TraitContainer<>).MakeGenericType(t)
.GetConstructor(Type.EmptyTypes).Invoke(null);
}
Dictionary<Type, ITraitContainer> traits = new Dictionary<Type, ITraitContainer>(); Dictionary<Type, ITraitContainer> traits = new Dictionary<Type, ITraitContainer>();
ITraitContainer InnerGet(Type t) ITraitContainer InnerGet(Type t)
@@ -31,14 +60,6 @@ namespace OpenRA
Log.Write("traitreport", "{0}: {1}", t.Key.Name, t.Value.Queries); Log.Write("traitreport", "{0}: {1}", t.Key.Name, t.Value.Queries);
} }
// construct this delegate once.
static Func<Type, ITraitContainer> doCreateTraitContainer = CreateTraitContainer;
static ITraitContainer CreateTraitContainer( Type t )
{
return (ITraitContainer)typeof( TraitContainer<> ).MakeGenericType( t )
.GetConstructor( Type.EmptyTypes ).Invoke( null );
}
public void AddTrait(Actor actor, object val) public void AddTrait(Actor actor, object val)
{ {
var t = val.GetType(); var t = val.GetType();
@@ -168,24 +189,4 @@ namespace OpenRA
} }
} }
} }
static class ListExts
{
public static int BinarySearchMany( this List<Actor> list, uint searchFor )
{
int start = 0;
int end = list.Count;
int mid = 0;
while( start != end )
{
mid = ( start + end ) / 2;
var c = list[ mid ].ActorID.CompareTo( searchFor );
if( c < 0 )
start = mid + 1;
else
end = mid;
}
return start;
}
}
} }