BrawlCrate v0.41
Wii File Editor
Loading...
Searching...
No Matches
Static Public Member Functions | List of all members
BrawlLib.SSBB.ResourceNodes.NodeFactory Class Reference

Static Public Member Functions

static void AddParser (Type t)
 
static ResourceNode FromFile (ResourceNode parent, string path)
 
static ResourceNode FromFile (ResourceNode parent, string path, Type t)
 
static ResourceNode FromFile (ResourceNode parent, string path, FileOptions options)
 
static ResourceNode FromFile (ResourceNode parent, string path, FileOptions options, Type t)
 
static ResourceNode FromAddress (ResourceNode parent, VoidPtr address, int length)
 
static ResourceNode FromSource (ResourceNode parent, DataSource source)
 
static ResourceNode FromSource (ResourceNode parent, DataSource source, bool supportCompression)
 
static ResourceNode FromSource (ResourceNode parent, DataSource source, Type t)
 
static ResourceNode FromSource (ResourceNode parent, DataSource source, Type t, bool supportCompression)
 
static ResourceNode GetRaw (VoidPtr address, int length)
 
static ResourceNode GetRaw (DataSource source, ResourceNode parent)
 
static ResourceNode FromFolder (ResourceNode parent, string path)
 

Member Function Documentation

◆ AddParser()

static void BrawlLib.SSBB.ResourceNodes.NodeFactory.AddParser ( Type  t)
inlinestatic
54 {
55 Delegate del = Delegate.CreateDelegate(typeof(ResourceParser), t, "TryParse", false, false);
56 if (del != null)
57 {
58 _parsers.Add(del as ResourceParser);
59 }
60
61 Delegate del2 = Delegate.CreateDelegate(typeof(ResourceParser), t, "TryParseGeneric", false, false);
62 if (del2 != null)
63 {
64 _parsersGeneric.Add(del2 as ResourceParser);
65 }
66 }

◆ FromAddress()

static ResourceNode BrawlLib.SSBB.ResourceNodes.NodeFactory.FromAddress ( ResourceNode  parent,
VoidPtr  address,
int  length 
)
inlinestatic
136 {
137 return FromSource(parent, new DataSource(address, length), null, true);
138 }
static ResourceNode FromSource(ResourceNode parent, DataSource source)
Definition: NodeFactory.cs:140

◆ FromFile() [1/4]

static ResourceNode BrawlLib.SSBB.ResourceNodes.NodeFactory.FromFile ( ResourceNode  parent,
string  path 
)
inlinestatic
70 {
71 return FromFile(parent, path, FileOptions.RandomAccess, null);
72 }
static ResourceNode FromFile(ResourceNode parent, string path)
Definition: NodeFactory.cs:69

◆ FromFile() [2/4]

static ResourceNode BrawlLib.SSBB.ResourceNodes.NodeFactory.FromFile ( ResourceNode  parent,
string  path,
FileOptions  options 
)
inlinestatic
80 {
81 return FromFile(parent, path, options, null);
82 }

◆ FromFile() [3/4]

static ResourceNode BrawlLib.SSBB.ResourceNodes.NodeFactory.FromFile ( ResourceNode  parent,
string  path,
FileOptions  options,
Type  t 
)
inlinestatic
85 {
86 ResourceNode node = null;
87 FileMap map = FileMap.FromFile(path, FileMapProtect.Read, 0, 0, options);
88 try
89 {
90 DataSource source = new DataSource(map);
91
92 bool supportsCompression = true;
93 if(!(t is null))
94 {
95 ResourceNode n = Activator.CreateInstance(t) as ResourceNode;
96 supportsCompression = n?.supportsCompression ?? true;
97 }
98
99 if ((node = FromSource(parent, source, t, supportsCompression)) == null)
100 {
101 string ext = path.Substring(path.LastIndexOf('.') + 1).ToUpper(CultureInfo.InvariantCulture);
102
103 if (!(t is null) && (node = Activator.CreateInstance(t) as ResourceNode) != null
104 || ForcedExtensions.ContainsKey(ext) &&
105 (node = Activator.CreateInstance(ForcedExtensions[ext]) as ResourceNode) != null)
106 {
107 FileMap uncompressedMap = Compressor.TryExpand(ref source, false);
108 if (uncompressedMap != null)
109 {
110 node.Initialize(parent, source, new DataSource(uncompressedMap));
111 }
112 else
113 {
114 node.Initialize(parent, source);
115 }
116 }
117 else
118 {
119 node = new RawDataNode(Path.GetFileName(path));
120 node.Initialize(parent, source);
121 }
122 }
123 }
124 finally
125 {
126 if (node == null)
127 {
128 map.Dispose();
129 }
130 }
131
132 return node;
133 }
Definition: FileMap.cs:10
virtual void Dispose()
Definition: FileMap.cs:33
static FileMap FromFile(string path)
Definition: FileMap.cs:48
Definition: Compressor.cs:37
static FileMap TryExpand(ref DataSource source, bool doTest=true)
Definition: Compressor.cs:155
FileMapProtect
Definition: FileMap.cs:175

◆ FromFile() [4/4]

static ResourceNode BrawlLib.SSBB.ResourceNodes.NodeFactory.FromFile ( ResourceNode  parent,
string  path,
Type  t 
)
inlinestatic
75 {
76 return FromFile(parent, path, FileOptions.RandomAccess, t);
77 }

◆ FromFolder()

static ResourceNode BrawlLib.SSBB.ResourceNodes.NodeFactory.FromFolder ( ResourceNode  parent,
string  path 
)
inlinestatic
228 {
229 FolderNode node = new FolderNode();
230 node._origPath = path;
231 node.Initialize(parent, new VoidPtr(), 0);
232 node.OnPopulate();
233 return node;
234 }
Definition: VoidPtr.cs:9

◆ FromSource() [1/4]

static ResourceNode BrawlLib.SSBB.ResourceNodes.NodeFactory.FromSource ( ResourceNode  parent,
DataSource  source 
)
inlinestatic
141 {
142 return FromSource(parent, source, null, true);
143 }

◆ FromSource() [2/4]

static ResourceNode BrawlLib.SSBB.ResourceNodes.NodeFactory.FromSource ( ResourceNode  parent,
DataSource  source,
bool  supportCompression 
)
inlinestatic
146 {
147 return FromSource(parent, source, null, supportCompression);
148 }

◆ FromSource() [3/4]

static ResourceNode BrawlLib.SSBB.ResourceNodes.NodeFactory.FromSource ( ResourceNode  parent,
DataSource  source,
Type  t 
)
inlinestatic
151 {
152 return FromSource(parent, source, t, true);
153 }

◆ FromSource() [4/4]

static ResourceNode BrawlLib.SSBB.ResourceNodes.NodeFactory.FromSource ( ResourceNode  parent,
DataSource  source,
Type  t,
bool  supportCompression 
)
inlinestatic
157 {
158 ResourceNode n;
159
160 if (t != null && (n = Activator.CreateInstance(t) as ResourceNode) != null)
161 {
162 FileMap uncompressedMap = null;
163 if (supportCompression)
164 {
165 uncompressedMap = Compressor.TryExpand(ref source, false);
166 }
167
168 if (uncompressedMap != null)
169 {
170 n.Initialize(parent, source, new DataSource(uncompressedMap));
171 }
172 else
173 {
174 n.Initialize(parent, source);
175 }
176 }
177 else if ((n = GetRaw(source, parent)) != null)
178 {
179 n.Initialize(parent, source);
180 }
181 else
182 {
183 FileMap uncomp = Compressor.TryExpand(ref source);
184 if (uncomp != null)
185 {
186 DataSource d = new DataSource(uncomp);
187 n = GetRaw(d, parent);
188 n?.Initialize(parent, source, d);
189 }
190 }
191
192 return n;
193 }
static ResourceNode GetRaw(VoidPtr address, int length)
Definition: NodeFactory.cs:195

◆ GetRaw() [1/2]

static ResourceNode BrawlLib.SSBB.ResourceNodes.NodeFactory.GetRaw ( DataSource  source,
ResourceNode  parent 
)
inlinestatic
201 {
202 if (source.Length <= 0)
203 {
204 return null;
205 }
206 ResourceNode n;
207
208 foreach (ResourceParser d in _parsers)
209 {
210 if ((n = d(source, parent)) != null)
211 {
212 return n;
213 }
214 }
215
216 foreach (ResourceParser d in _parsersGeneric)
217 {
218 if ((n = d(source, parent)) != null)
219 {
220 return n;
221 }
222 }
223
224 return null;
225 }

◆ GetRaw() [2/2]

static ResourceNode BrawlLib.SSBB.ResourceNodes.NodeFactory.GetRaw ( VoidPtr  address,
int  length 
)
inlinestatic
196 {
197 return GetRaw(new DataSource(address, length), null);
198 }

The documentation for this class was generated from the following file: