public GroupElement(GE groupElement) { if (groupElement.IsInfinity) { LazyGe = new Lazy <GE>(() => GE.Infinity); } else { Guard.True($"{nameof(groupElement)}.{nameof(groupElement.IsValidVariable)}", groupElement.IsValidVariable); LazyGe = new Lazy <GE>(() => new GE(groupElement.x.Normalize(), groupElement.y.Normalize())); } Gej = Ge.ToGroupElementJacobian(); // eagerly initialize Ge property }
// Since GEJ.IsValidVariable, this constructor is private private GroupElement(GEJ groupElementJacobian) { if (groupElementJacobian.IsInfinity) { LazyGe = new Lazy <GE>(() => GE.Infinity); Gej = Ge.ToGroupElementJacobian(); // eagerly initialize Ge property } else { GE ComputeAffineCoordinates() { var groupElement = groupElementJacobian.ToGroupElement(); return(new GE(groupElement.x.Normalize(), groupElement.y.Normalize())); } LazyGe = new Lazy <GE>(ComputeAffineCoordinates); // avoid computing affine coordinates until needed Gej = groupElementJacobian; } }