Moving non-changing methods into .cs partial

This commit is contained in:
Louis DeJardin 2015-10-08 12:35:20 -07:00
parent ccfeef6353
commit 29b0b124ee
3 changed files with 41 additions and 76 deletions

View File

@ -6,10 +6,8 @@ using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNet.Http.Features;
using Microsoft.AspNet.Server.Kestrel.Http;
using Microsoft.Extensions.Primitives;
namespace Microsoft.AspNet.Server.Kestrel.Http
@ -34,6 +32,42 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
_featureRevision++;
}
private object ExtraFeatureGet(Type key)
{
if (MaybeExtra == null)
{
return null;
}
for (var i = 0; i < MaybeExtra.Count; i++)
{
var kv = MaybeExtra[i];
if (kv.Key == key)
{
return kv.Value;
}
}
return null;
}
private void ExtraFeatureSet(Type key, object value)
{
if (MaybeExtra == null)
{
MaybeExtra = new List<KeyValuePair<Type, object>>(2);
}
for (var i = 0; i < MaybeExtra.Count; i++)
{
if (MaybeExtra[i].Key == key)
{
MaybeExtra[i] = new KeyValuePair<Type, object>(key, value);
return;
}
}
MaybeExtra.Add(new KeyValuePair<Type, object>(key, value));
}
string IHttpRequestFeature.Protocol
{
get

View File

@ -172,52 +172,8 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
{
return _currentIHttpSendFileFeature;
}
return SlowFeatureGet(key);
}
private object SlowFeatureGet(Type key)
{
if (MaybeExtra == null)
{
if ((_featureOverridenFlags & flagIHttpConnectionFeature) == 0L)
{
return this;
}
return SlowFeatureGet(key);
}
if (key == ITlsConnectionFeatureType)
{
if ((_featureOverridenFlags & flagITlsConnectionFeature) == 0L)
{
return this;
}
return SlowFeatureGet(key);
}
if (key == IHttpUpgradeFeatureType)
{
if ((_featureOverridenFlags & flagIHttpUpgradeFeature) == 0L)
{
return this;
}
return SlowFeatureGet(key);
}
if (key == IHttpWebSocketFeatureType)
{
if ((_featureOverridenFlags & flagIHttpWebSocketFeature) == 0L)
{
return this;
}
return SlowFeatureGet(key);
}
if (key == ISessionFeatureType)
{
if ((_featureOverridenFlags & flagISessionFeature) == 0L)
{
return this;
}
return SlowFeatureGet(key);
}
return SlowFeatureGet(key);
return ExtraFeatureGet(key);
}
@ -333,7 +289,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
_currentIHttpSendFileFeature = feature;
return;
};
SetExtra(key, feature);
ExtraFeatureSet(key, feature);
}
private IEnumerable<KeyValuePair<Type, object>> FastEnumerable()

View File

@ -79,35 +79,10 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
{{
return _current{feature.Name};
}}")}
return SlowFeatureGet(key);
return ExtraFeatureGet(key);
}}
private object SlowFeatureGet(Type key)
{{
object feature = null;
if (MaybeExtra?.TryGetValue(key, out feature) ?? false)
{{
return feature;
}}
return null;
}}
private void FastFeatureSetInner(long flag, Type key, object feature)
{{
Extra[key] = feature;
// Altering only an individual bit of the long
// so need to make sure other concurrent bit changes are not overridden
// in an atomic yet lock-free manner
long currentFeatureFlags;
long updatedFeatureFlags;
do
{{
currentFeatureFlags = _featureOverridenFlags;
updatedFeatureFlags = currentFeatureFlags | flag;
}} while (System.Threading.Interlocked.CompareExchange(ref _featureOverridenFlags, updatedFeatureFlags, currentFeatureFlags) != currentFeatureFlags);
private void FastFeatureSet(Type key, object feature)
{{
_featureRevision++;
@ -117,7 +92,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
_current{feature.Name} = feature;
return;
}}")};
SetExtra(key, feature);
ExtraFeatureSet(key, feature);
}}
private IEnumerable<KeyValuePair<Type, object>> FastEnumerable()