The first half of a Hermite step is particularly simple, nothing more than a rather short Taylor series development:
Notice how much we can already read off from the way the arguments to predict_step() are declared: accelerations and jerks are passed as const variables, whereas positions and velocities are not. This implies that the latter two are updated, whereas the former two are used to provide information for the update, without being changed themselves. This of course is exactly what happens.