with Bookstore.Books;
with Bookstore.Cart_Items;
with Bookstore.Cart_Items.Hashed_Maps;
with Bookstore.Cart_Items.Lists;

5package Bookstore.Carts is


   -- java code use synchronized operations. For now we use a normal
   --  type
10
   type Shopping_Cart is tagged private;

   type Cart_Size is new Natural;

15   function Create_Shopping_Cart return Shopping_Cart;

   procedure Add (Cart : in out Shopping_Cart;
                  ID   : in     Books.Id_Str;
                  Book : in     Books.Book);
20
   procedure Remove (Cart : in out Shopping_Cart;
                     ID   : in     Books.Id_Str);

   procedure Clear (Cart : in out Shopping_Cart);
25
   function Get_Number_Of_Items (Cart : in Shopping_Cart) return Cart_Size;

   function Get_Total (Cart : in Shopping_Cart) return Books.Value;

30   function Get_Items (Cart : in Shopping_Cart) return Cart_Items.Lists.List;

   Empty_Cart : constant Shopping_Cart;

private
35
   package Item_Maps renames Bookstore.Cart_Items.Hashed_Maps;
   type Shopping_Cart is tagged
      record
         Items           : Item_Maps.Map := Item_Maps.Empty_Map;
40         Number_Of_Items : Cart_Size     := 0;
      end record;

   Empty_Cart : constant Shopping_Cart
     := Shopping_Cart'(Item_Maps.Empty_Map, 0);
45
end Bookstore.Carts;

top