// create an internal PRD so we can use preferences
PackedPreferenceData tmpPack = internalBuild();
// create an internal flyweight
// after this point, this method does no allocation
PackedPreferenceData.IndirectPreference pref = tmpPack.preference(-1);
/*
* we have to do this backwards so we don't copy free slots from the
* end of the arrays. So, we first create an array of free indices
* in reverse order (the greatest index is first).