public bool TryMarge(CodeSeed b, out CodeSeed ret) { ret = null; if (!(this is CanMargeCodeSeed am)) { return(false); } if (!(b is CanMargeCodeSeed bm)) { return(false); } if (am.Type != bm.Type) { return(false); } ret = CanMargeCodeSeed.Marge(am, bm); return(true); }
static public CanMargeCodeSeed Marge(CanMargeCodeSeed a, CanMargeCodeSeed b) { if (a.Type != b.Type) { throw new ArgumentNullException(); } if (a._header == b._header) { return(new CanMargeCodeSeed(a, a._length + b._length)); } else if (a._length > b._length) { return(new CanMargeCodeSeed(a, a._length - b._length)); } else { return(new CanMargeCodeSeed(b, b._length - a._length)); } }
private CanMargeCodeSeed(CanMargeCodeSeed baseSeed, int length) { Type = baseSeed.Type; _header = baseSeed._header; _length = length; }