template< typename T > const T &put( int idx, const T &t ){
EEPtr e = idx;
const uint8_t *ptr = (const uint8_t*) &t;
for( int count = sizeof(T) ; count ; --count, ++e ) (*e).update( *ptr++ );
return t;
}
The put() function in the EEPROM library uses update() instead of write(), so it does a read first, then only writes to EEPROM if the value has changed.