What I described above (snipped) is average current mode control -- you can do the same thing with peak mode control, in which case the inner loop uses a comparator and flip-flop. UC3842 is a classic example.
(You could further put an average current sensing loop around that, I suppose, but I don't know why.)
The main downside to peak-mode control is, it only works well in DCM (inductor current goes to zero each cycle), which costs ripple and noisiness. You can run at higher duty cycles (over 50%, inductor current not returning to zero), but you have to compensate for it, otherwise the loop goes unstable[1]. They call it "slope compensation", which just adds some of the oscillator slope with the current slope, which gets you a hybrid between the lone-pulse-width-modulator case and pure current mode operation.
[1] The loop exhibits a zero in the right half plane at 1/2 F_sw, or something like that, so as power output is turned up, it starts oscillating at half the operating frequency. As it grows, the small-signal approximation stops being valid, and the pulse widths saturate, resulting in a chaotic system. In fact, it exhibits a chaotic map identical to the Logistic Function.Time domain intuition shows that, if inductor current doesn't discharge to zero by the time the oscillator kicks the switch back on, the amount of time until it reaches peak becomes a free variable -- current is still limited in magnitude, but now the pulse widths can see-saw from one pulse to the next, with the average pulse width held in place by the setpoint. At low power, it operates smoothly, but as you turn it up, it starts alternating, short pulse, long pulse; then it bifurcates again: very short, medium long, medium short, very long; and so on. Over most of the range, it hisses because it's jumping between so many pulse widths that it's approximately random.
Tim