You've already forked linux-packaging-mono
Imported Upstream version 4.3.2.467
Former-commit-id: 9c2cb47f45fa221e661ab616387c9cda183f283d
This commit is contained in:
136
mcs/class/corlib/coreclr/EncodingProvider.cs
Normal file
136
mcs/class/corlib/coreclr/EncodingProvider.cs
Normal file
@ -0,0 +1,136 @@
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
|
||||
namespace System.Text
|
||||
{
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
[System.Runtime.InteropServices.ComVisible(true)]
|
||||
public abstract class EncodingProvider
|
||||
{
|
||||
public EncodingProvider() { }
|
||||
public abstract Encoding GetEncoding(string name);
|
||||
public abstract Encoding GetEncoding(int codepage);
|
||||
|
||||
// GetEncoding should return either valid encoding or null. shouldn't throw any exception except on null name
|
||||
public virtual Encoding GetEncoding(string name, EncoderFallback encoderFallback, DecoderFallback decoderFallback)
|
||||
{
|
||||
Encoding enc = GetEncoding(name);
|
||||
if (enc != null)
|
||||
{
|
||||
enc = (Encoding)GetEncoding(name).Clone();
|
||||
enc.EncoderFallback = encoderFallback;
|
||||
enc.DecoderFallback = decoderFallback;
|
||||
}
|
||||
|
||||
return enc;
|
||||
}
|
||||
|
||||
public virtual Encoding GetEncoding(int codepage, EncoderFallback encoderFallback, DecoderFallback decoderFallback)
|
||||
{
|
||||
Encoding enc = GetEncoding(codepage);
|
||||
if (enc != null)
|
||||
{
|
||||
enc = (Encoding)GetEncoding(codepage).Clone();
|
||||
enc.EncoderFallback = encoderFallback;
|
||||
enc.DecoderFallback = decoderFallback;
|
||||
}
|
||||
|
||||
return enc;
|
||||
}
|
||||
|
||||
internal static void AddProvider(EncodingProvider provider)
|
||||
{
|
||||
if (provider == null)
|
||||
throw new ArgumentNullException("provider");
|
||||
|
||||
lock (s_InternalSyncObject)
|
||||
{
|
||||
if (s_providers == null)
|
||||
{
|
||||
s_providers = new EncodingProvider[1] { provider };
|
||||
return;
|
||||
}
|
||||
|
||||
if (Array.IndexOf(s_providers, provider) >= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var providers = new EncodingProvider[s_providers.Length + 1];
|
||||
Array.Copy(s_providers, providers, s_providers.Length);
|
||||
providers[providers.Length - 1] = provider;
|
||||
s_providers = providers;
|
||||
}
|
||||
}
|
||||
|
||||
internal static Encoding GetEncodingFromProvider(int codepage)
|
||||
{
|
||||
if (s_providers == null)
|
||||
return null;
|
||||
|
||||
var providers = s_providers;
|
||||
foreach (EncodingProvider provider in providers)
|
||||
{
|
||||
Encoding enc = provider.GetEncoding(codepage);
|
||||
if (enc != null)
|
||||
return enc;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
internal static Encoding GetEncodingFromProvider(string encodingName)
|
||||
{
|
||||
if (s_providers == null)
|
||||
return null;
|
||||
|
||||
var providers = s_providers;
|
||||
foreach (EncodingProvider provider in providers)
|
||||
{
|
||||
Encoding enc = provider.GetEncoding(encodingName);
|
||||
if (enc != null)
|
||||
return enc;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
internal static Encoding GetEncodingFromProvider(int codepage, EncoderFallback enc, DecoderFallback dec)
|
||||
{
|
||||
if (s_providers == null)
|
||||
return null;
|
||||
|
||||
var providers = s_providers;
|
||||
foreach (EncodingProvider provider in providers)
|
||||
{
|
||||
Encoding encing = provider.GetEncoding(codepage, enc, dec);
|
||||
if (encing != null)
|
||||
return encing;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
internal static Encoding GetEncodingFromProvider(string encodingName, EncoderFallback enc, DecoderFallback dec)
|
||||
{
|
||||
if (s_providers == null)
|
||||
return null;
|
||||
|
||||
var providers = s_providers;
|
||||
foreach (EncodingProvider provider in providers)
|
||||
{
|
||||
Encoding encoding = provider.GetEncoding(encodingName, enc, dec);
|
||||
if (encoding != null)
|
||||
return encoding;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Object s_InternalSyncObject = new Object();
|
||||
private static volatile EncodingProvider[] s_providers;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user