~ubuntu-branches/ubuntu/oneiric/monodevelop/oneiric

« back to all changes in this revision

Viewing changes to contrib/Mono.Cecil/Mono.Cecil/Mono.Cecil/EmbeddedResource.cs

  • Committer: Bazaar Package Importer
  • Author(s): Jo Shields
  • Date: 2011-06-27 17:03:13 UTC
  • mto: (1.8.1 upstream)
  • mto: This revision was merged to the branch mainline in revision 54.
  • Revision ID: james.westby@ubuntu.com-20110627170313-6cvz3s19x6e9hqe9
ImportĀ upstreamĀ versionĀ 2.5.92+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
// Author:
5
5
//   Jb Evain (jbevain@gmail.com)
6
6
//
7
 
// (C) 2005 Jb Evain
 
7
// Copyright (c) 2008 - 2010 Jb Evain
8
8
//
9
9
// Permission is hereby granted, free of charge, to any person obtaining
10
10
// a copy of this software and associated documentation files (the
26
26
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
27
//
28
28
 
 
29
using System;
 
30
using System.IO;
 
31
 
29
32
namespace Mono.Cecil {
30
33
 
31
34
        public sealed class EmbeddedResource : Resource {
32
35
 
33
 
                byte [] m_data;
34
 
 
35
 
                public byte [] Data {
36
 
                        get { return m_data; }
37
 
                        set { m_data = value; }
38
 
                }
39
 
 
40
 
                public EmbeddedResource (string name, ManifestResourceAttributes flags) :
41
 
                        base (name, flags)
42
 
                {
43
 
                }
44
 
 
45
 
                public EmbeddedResource (string name, ManifestResourceAttributes flags, byte [] data) :
46
 
                        base (name, flags)
47
 
                {
48
 
                        m_data = data;
49
 
                }
50
 
 
51
 
                public override void Accept (IReflectionStructureVisitor visitor)
52
 
                {
53
 
                        visitor.VisitEmbeddedResource (this);
 
36
                readonly MetadataReader reader;
 
37
 
 
38
                uint? offset;
 
39
                byte [] data;
 
40
                Stream stream;
 
41
 
 
42
                public override ResourceType ResourceType {
 
43
                        get { return ResourceType.Embedded; }
 
44
                }
 
45
 
 
46
                public EmbeddedResource (string name, ManifestResourceAttributes attributes, byte [] data) :
 
47
                        base (name, attributes)
 
48
                {
 
49
                        this.data = data;
 
50
                }
 
51
 
 
52
                public EmbeddedResource (string name, ManifestResourceAttributes attributes, Stream stream) :
 
53
                        base (name, attributes)
 
54
                {
 
55
                        this.stream = stream;
 
56
                }
 
57
 
 
58
                internal EmbeddedResource (string name, ManifestResourceAttributes attributes, uint offset, MetadataReader reader)
 
59
                        : base (name, attributes)
 
60
                {
 
61
                        this.offset = offset;
 
62
                        this.reader = reader;
 
63
                }
 
64
 
 
65
                public Stream GetResourceStream ()
 
66
                {
 
67
                        if (stream != null)
 
68
                                return stream;
 
69
 
 
70
                        if (data != null)
 
71
                                return new MemoryStream (data);
 
72
 
 
73
                        if (offset.HasValue)
 
74
                                return reader.GetManagedResourceStream (offset.Value);
 
75
 
 
76
                        throw new InvalidOperationException ();
 
77
                }
 
78
 
 
79
                public byte [] GetResourceData ()
 
80
                {
 
81
                        if (stream != null)
 
82
                                return ReadStream (stream);
 
83
 
 
84
                        if (data != null)
 
85
                                return data;
 
86
 
 
87
                        if (offset.HasValue)
 
88
                                return reader.GetManagedResourceStream (offset.Value).ToArray ();
 
89
 
 
90
                        throw new InvalidOperationException ();
 
91
                }
 
92
 
 
93
                static byte [] ReadStream (Stream stream)
 
94
                {
 
95
                        var length = (int) stream.Length;
 
96
                        var data = new byte [length];
 
97
                        int offset = 0, read;
 
98
 
 
99
                        while ((read = stream.Read (data, offset, length - offset)) > 0)
 
100
                                offset += read;
 
101
 
 
102
                        return data;
54
103
                }
55
104
        }
56
105
}