Implémentation d'un séquence impérative sous forme de vecteur avec trou

déplacer-intervalle(tableau t1, entier début, entier fin, tableau t2, entier pos)
  si t1 = t2 et pos > début et pos < fin
  alors
    // on déplace de la fin vers le début
    pour i allant de fin - début - 1 jusqu'à 0
      t2[pos + i] <- t1[début + i]
  sinon
    pour i allant de 0 jusqu'à fin - début - 1
      t2[pos + i] <- t1[début + i]
vider-intervalle(tableau t, entier début, entier fin)
  pour i allant de 0 jusqu'à fin - début - 1
    t[début + i] <- nil
déplacer-trou(tableau t, entier début, entier fin, entier position)
  si position = début
  alors // ne rien faire
  sinon si position < début
  alors
    taille-trou <- fin - début
    taille-intervalle <- début - position
    déplacer-intervalle(t, position, début, t, position + taille-trou)
    vider-intervalle(t, position, position + min(taille-trou, taille-intervalle))
  sinon
    taille-trou <- fin - début
    taille-intervalle <- position - début
    déplacer-intervalle(t, fin, fin + taille-intervalle, t, début)
    vider-intervalle(t, début + max(taille-trou, taille-intervalle), 
                     fin + taille-intervalle)
entier
taille(s)
  renvoyer début-trou(s) + taille-tableau(s) - fin-trou(s)
positionner-trou(séquence s, entier position)
  si début-trou(s) = position
  alors
    // ne rien faire
  sinon
    taille-trou <- fin-trou(s) - début-trou(s)
    déplacer-trou(tableau(s), début-trou(s), fin-trou(s), position)
    début-trou(s) <- position
    fin-trou(s) <- position + taille-trou
insérer(objet obj, séquence s, entier position)
  assert(position <= taille(s))
  positionner-trou(s, position)
  si fin-trou(s) = début-trou(s)
  alors
    t = créer-tableau(2 * taille-tableau(s))
    déplacer-intervalle(tableau(s), 0, début-trou(s), t, 0)
    déplacer-intervalle(tableau(s), fin-trou(s), taille-tableau(s), 
                        t, début-trou(s) + taille-tableau(s))
    fin-trou(s) <- début-trou(s) + taille-tableau(s)
    tableau(s) <- t 
    taille-tableau(s) <- 2 * taille-tableau(s)
  tableau(s)[debut-trou(s)] <- obj
  début-trou(s) <- début-trou(s) + 1
supprimer(séquence s, entier position)
  assert(position < taille(s))
  positionner-trou(s, position)
  tableau(s)[fin-trou(s)] <- nil
  fin-trou(s) <- fin-trou(s) + 1