-- This source is licensed under the Sunset License v1.0 with Ada.Containers.Vectors, Ada.Containers.Ordered_Maps, Ada.Strings.Unbounded, Datatypes; private with Ada.Finalization, SQLite3; package Deck_IO is package SU renames Ada.Strings.Unbounded; use type SU.Unbounded_String; type Deck_Handle is limited private; function Matches (Models : in Datatypes.Model_Map; Notes : in Datatypes.Note_Vector) return Boolean; procedure Read_Media_Collection (Filename : in String; Media : out Datatypes.Media_Collection); procedure Open_Database (Filename : in String; Deck : in out Deck_Handle) with Post => Is_Open (Deck); function Is_Open (Deck : in Deck_Handle) return Boolean; procedure Close_Database (Deck : in out Deck_Handle) with Post => not Is_Open (Deck); procedure Query_Models (Deck : in out Deck_Handle; Models : out Datatypes.Model_Map) with Pre => Is_Open (Deck); procedure Query_Notes (Deck : in out Deck_Handle; Notes : out Datatypes.Note_Vector) with Pre => Is_Open (Deck); procedure Write_CSV (Directory : in String; Basename : in String; Models : in Datatypes.Model_Map; Notes : in Datatypes.Note_Vector; Overwrite : in Boolean := False) with Pre => Matches (Models, Notes); procedure Write_FMD (Directory : in String; Basename : in String; Models : in Datatypes.Model_Map; Notes : in Datatypes.Note_Vector; Media : in Datatypes.Media_Collection; Overwrite : in Boolean := False) with Pre => Matches (Models, Notes); private type Deck_Handle is new Ada.Finalization.Limited_Controlled with record SQL_Handle : SQLite3.SQLite3_DB; Status : SQLite3.Status_Code := SQLite3.SQLITE_OK; Opened : Boolean := False; Tempfile : SU.Unbounded_String := SU.To_Unbounded_String (""); end record; overriding procedure Finalize (This : in out Deck_Handle); end Deck_IO;