using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Permissions;
-#if NET_2_0
using System.Collections.Generic;
-#endif
namespace System.Resources
{
FistCustom = 64
}
-#if NET_2_0
[System.Runtime.InteropServices.ComVisible (true)]
-#endif
public sealed class ResourceReader : IResourceReader, IEnumerable, IDisposable
{
struct ResourceInfo
ResourceValue = value;
}
}
-
+
BinaryReader reader;
object readerLock = new object ();
IFormatter formatter;
/* Now read the ResourceReader header */
resource_ver = reader.ReadInt32();
- if(resource_ver != 1
-#if NET_2_0
- && resource_ver != 2
-#endif
- ) {
+ if(resource_ver != 1 && resource_ver != 2) {
throw new NotSupportedException("This .resources file requires unsupported set class version: " + resource_ver.ToString());
}
return ret;
}
-#if NET_2_0
object ReadValueVer2 (int type_index)
{
switch ((PredefinedResourceType)type_index)
type_index -= (int)PredefinedResourceType.FistCustom;
return ReadNonPredefinedValue (Type.GetType (typeNames[type_index], true));
}
-#endif
object ReadValueVer1 (Type type)
{
}
reader.BaseStream.Seek (ri.ValuePosition, SeekOrigin.Begin);
-#if NET_2_0
if (resource_ver == 2)
value = ReadValueVer2 (ri.TypeIndex);
else
-#endif
value = ReadValueVer1 (Type.GetType (typeNames [ri.TypeIndex], true));
store [i] = new ResourceCacheItem (ri.ResourceName, value);
}
}
-#if NET_2_0
internal UnmanagedMemoryStream ResourceValueAsStream (string name, int index)
{
ResourceInfo ri = infos [index];
// current position so that the returned
// Stream represents a single object stream.
long slen = reader.ReadInt32();
- IntPtrStream basePtrStream = reader.BaseStream as IntPtrStream;
+ UnmanagedMemoryStream basePtrStream = reader.BaseStream as UnmanagedMemoryStream;
unsafe {
if (basePtrStream != null) {
- byte* addr = (byte*) basePtrStream.BaseAddress.ToPointer ();
- addr += basePtrStream.Position;
- return new UnmanagedMemoryStream ((byte*) (void*) addr, slen);
+ return new UnmanagedMemoryStream (basePtrStream.PositionPointer, slen);
} else {
IntPtr ptr = Marshal.AllocHGlobal ((int) slen);
byte* addr = (byte*) ptr.ToPointer ();
- UnmanagedMemoryStream ms = new UnmanagedMemoryStream (addr, slen, slen, FileAccess.ReadWrite);
- // The memory resource must be freed
- // when the stream is disposed.
- ms.Closed += delegate (object o, EventArgs e) {
- Marshal.FreeHGlobal (ptr);
- };
+ UnmanagedMemoryStream ms = new HGlobalUnmanagedMemoryStream (addr, slen, ptr);
byte [] bytes = new byte [slen < 1024 ? slen : 1024];
while (slen > 0 ) {
}
}
}
-#endif
public void Close ()
{
Dispose(true);
}
+
+ public void Dispose ()
+ {
+ Dispose(true);
+ }
public IDictionaryEnumerator GetEnumerator () {
if (reader == null){
{
return ((IResourceReader) this).GetEnumerator();
}
-#if NET_2_0
+
public void GetResourceData (string resourceName, out string resourceType, out byte [] resourceData)
{
if (resourceName == null)
reader.BaseStream.Read (data, 0, datalen);
}
}
-#endif
- void IDisposable.Dispose ()
- {
- Dispose(true);
- }
private void Dispose (bool disposing)
{
}
}
-#if NET_2_0
public UnmanagedMemoryStream ValueAsStream
{
get {
return(reader.ResourceValueAsStream((string) Key, index));
}
}
-#endif
public object Current
{