internal static unsafe NXNode ParseNode(NodeData *ptr, NXNode parent, NXFile file) { NodeData nd = *ptr; string name = file.GetString(nd.NodeNameID); NXNode ret; switch (nd.Type) { case 0: ret = new NXNode(name, parent, file, nd.ChildCount, nd.FirstChildID); break; case 1: ret = new NXValuedNode <long>(name, parent, file, nd.Type1Data, nd.ChildCount, nd.FirstChildID); break; case 2: ret = new NXValuedNode <double>(name, parent, file, nd.Type2Data, nd.ChildCount, nd.FirstChildID); break; case 3: ret = new NXStringNode(name, parent, file, nd.TypeIDData, nd.ChildCount, nd.FirstChildID); break; case 4: ret = new NXValuedNode <Point>(name, parent, file, new Point(nd.Type4DataX, nd.Type4DataY), nd.ChildCount, nd.FirstChildID); break; case 5: ret = new NXCanvasNode(name, parent, file, nd.TypeIDData, nd.Type5Width, nd.Type5Height, nd.ChildCount, nd.FirstChildID); break; case 6: ret = new NXMP3Node(name, parent, file, nd.TypeIDData, nd.Type4DataY, nd.ChildCount, nd.FirstChildID); break; default: return(Util.Die <NXNode>(string.Format("NX node has invalid type {0}; dying", nd.Type))); } if ((file._flags & NXReadSelection.EagerParseFile) == NXReadSelection.EagerParseFile) { ret.CheckChild(); } return(ret); }
internal static unsafe NXNode ParseNode(NodeData *ptr, NXNode parent, NXFile file) { NXNode ret; switch (ptr->Type) { case 0: ret = new NXNode(ptr, file); break; case 1: ret = new NXInt64Node(ptr, file); break; case 2: ret = new NXDoubleNode(ptr, file); break; case 3: ret = new NXStringNode(ptr, file); break; case 4: ret = new NXPointNode(ptr, file); break; case 5: ret = new NXBitmapNode(ptr, file); break; case 6: ret = new NXAudioNode(ptr, file); break; default: return(Util.Die <NXNode>(string.Format("NX node has invalid type {0}; dying", ptr->Type))); } if ((file._flags & NXReadSelection.EagerParseFile) == NXReadSelection.EagerParseFile) { ret.CheckChild(); } return(ret); }
internal static unsafe NXNode ParseNode(NodeData *ptr, NXFile file) { NXNode ret; switch (ptr->Type) { case NXNodeType.Nothing: ret = new NXNode(ptr, file); break; case NXNodeType.Int64: ret = new NXInt64Node(ptr, file); break; case NXNodeType.Double: ret = new NXDoubleNode(ptr, file); break; case NXNodeType.String: ret = new NXStringNode(ptr, file); break; case NXNodeType.Point: ret = new NXPointNode(ptr, file); break; case NXNodeType.Bitmap: ret = new NXBitmapNode(ptr, file); break; case NXNodeType.Audio: ret = new NXAudioNode(ptr, file); break; default: return(Util.Die <NXNode>($"NX node has invalid type {ptr->Type}")); } if (file.HasFlag(NXReadSelection.EagerParseFile)) { ret.InitialiseMap(); } return(ret); }