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]