class interface DS_BILINKABLE[G]
creation
   make (v: G)
      --  Insert v in cell.
      ensure
         inserted: item = v
feature(s) from DS_CELL
   --  Access
   item: G
      --  Content of cell
feature(s) from DS_CELL
   --  Element change
   put (v: G)
      --  Insert v in cell.
      ensure
         inserted: item = v
feature(s) from DS_CELL
   --  Element change
   make (v: G)
      --  Insert v in cell.
      ensure
         inserted: item = v
feature(s) from DS_LINKABLE
   --  Access
   right: like Current
      --  Right neighbor
feature(s) from DS_LINKABLE
   --  Element change
   put_right (other: like Current)
      --  Put other to right of cell.
      --  Make sure that link is bidirectional.
      require
         other_not_void: other /= Void
      ensure
         bilinked: other.left = Current;
         linked: right = other
   forget_right
      --  Remove right neighbor.
      ensure
         forgotten: right = Void
feature(s) from DS_BILINKABLE
   --  Access
   left: like Current
      --  Left neighbor
feature(s) from DS_BILINKABLE
   --  Element change
   put_left (other: like Current)
      --  Put other to left of cell.
      --  Make sure that link is bidirectional.
      require
         other_not_void: other /= Void
      ensure
         linked: left = other;
         bilinked: other.right = Current
   forget_left
      --  Remove left neighbor.
      ensure
         forgotten: left = Void
end of DS_BILINKABLE[G]