public bool Save(Stream s) { BinaryWriter b = new BinaryWriter(s); b.Write(cNewVersionDelimeter); b.Write(MaskCheckList.Items.Count); b.Write(TerrainGlobals.getTerrain().getNumXVerts()); foreach (MaskItem item in MaskCheckList.Items) { b.Write(item.Name); b.Write(item.mMask.GetType().ToString()); if (item.mMask is ArrayBasedMask) { JaggedContainer <float> container = item.mMask as JaggedContainer <float>; container.SaveByStripe(b, (JaggedContainer <float> .SaveStripeDelegate)(delegate(BinaryWriter w, float[] values) { for (int i = 0; i < values.Length; i++) { w.Write(values[i]); } })); } else if (item.mMask is GraphBasedMask) { GraphBasedMask gbm = item.mMask as GraphBasedMask; b.Write(gbm.GraphMemStream.Length); gbm.GraphMemStream.Seek(0, SeekOrigin.Begin); gbm.GraphMemStream.WriteTo(b.BaseStream); } } return(true); }