@@ -314,6 +314,8 @@ private ChemicalFormula Merge(ChemicalFormula otherFormula, bool add)
314
314
315
315
for ( int i = 0 ; i < newCommonElements . Length ; i ++ )
316
316
newCommonElements [ i ] = - otherCommonElements [ i ] ;
317
+
318
+ formula . _commonElements = newCommonElements ;
317
319
}
318
320
319
321
formula . _commonElementEntities = otherFormula . _commonElementEntities ;
@@ -380,7 +382,8 @@ private ChemicalFormula Merge(ChemicalFormula otherFormula, bool add)
380
382
/// <returns></returns>
381
383
public ChemicalFormula Multiply ( int multiplier )
382
384
{
383
- if ( multiplier == 0 )
385
+ // If either side is '0' just return Empty
386
+ if ( this == Empty || multiplier == 0 )
384
387
return Empty ;
385
388
386
389
if ( multiplier == 1 )
@@ -413,6 +416,32 @@ public ChemicalFormula Multiply(int multiplier)
413
416
return formula ;
414
417
}
415
418
419
+ #region Operator Overloads
420
+ /// <summary>Implements the operator +.</summary>
421
+ /// <param name="c1">The c1.</param>
422
+ /// <param name="c2">The c2.</param>
423
+ public static ChemicalFormula operator + ( ChemicalFormula c1 , ChemicalFormula c2 ) => c1 . Merge ( c2 , true ) ;
424
+
425
+ /// <summary>Implements the operator -.</summary>
426
+ /// <param name="c1">The c1.</param>
427
+ /// <param name="c2">The c2.</param>
428
+ public static ChemicalFormula operator - ( ChemicalFormula c1 , ChemicalFormula c2 ) => c1 . Merge ( c2 , false ) ;
429
+
430
+ /// <summary>Implements the operator - (negation).</summary>
431
+ /// <param name="c1">The c1.</param>
432
+ public static ChemicalFormula operator - ( ChemicalFormula c1 ) => c1 . Multiply ( - 1 ) ;
433
+
434
+ /// <summary>Implements the operator *.</summary>
435
+ /// <param name="c1">The c1.</param>
436
+ /// <param name="multiplier">The multiplier.</param>
437
+ public static ChemicalFormula operator * ( ChemicalFormula c1 , int multiplier ) => c1 . Multiply ( multiplier ) ;
438
+
439
+ /// <summary>Implements the operator *.</summary>
440
+ /// <param name="multiplier">The multiplier.</param>
441
+ /// <param name="c1">The c1.</param>
442
+ public static ChemicalFormula operator * ( int multiplier , ChemicalFormula c1 ) => c1 . Multiply ( multiplier ) ;
443
+ #endregion
444
+
416
445
/// <summary>Parses the string into a chemical formula.</summary>
417
446
/// <param name="formula">The formula.</param>
418
447
/// <param name="elementProvider">The element provider.</param>
0 commit comments