Source: http://www.labri.fr/perso/granier/Cours/LP/2010-2011/02_pipeline.pdf