Error-Correcting Codes for Semiconductor Memory Applications: A State-of-the-Art Review | Synapse