#ifndef DATABASE_
#define DATABASE_
class Database  
	{ 
	public:
		//Buffer
		static const int BUFFER_SIZE = 128;
		static const int BUFFER_MAX = (BUFFER_SIZE - 1);
		typedef char Buffer[BUFFER_SIZE + 1];
		static const char COMMENT_CHAR = '!';
		//Text Field
		static const int TEXT_FIELD_SIZE = 32;
		static const int TEXT_FIELD_MAX = (TEXT_FIELD_SIZE - 1);
		typedef char TextField[TEXT_FIELD_SIZE + 1] ;
		//STL defs
		typedef list<Library_Item *> LibList;
		typedef list<Patron *> PatronList;
	
		typedef list<Borrow *> BorrowList;
		typedef list<Identity::Id > BorrowIdList;
		typedef map<Identity::Id, Borrow *> BorrowMap;

		typedef map<Identity::Id, Book *> BookMap;
		typedef map<Identity::Id, Newspaper *> NewspaperMap;
		typedef map<Identity::Id, Periodical *> PeriodicalMap;
	
		typedef map<Identity::Id, Lost_Item *> LostMap;
		typedef list<Identity::Id> LostList;

		typedef list<Transaction *> TransactionList;
		typedef deque<Transaction *> TransactionQueue;
	
		typedef map<Identity::Id, Patron *> PatronMap;
	
		//Student
		static const Text studentDB;
		static const int  STUDENT_ARG_COUNT = 6;
	
		//Faculty
		static const Text facultyDB;
		static const int  FACULTY_ARG_COUNT = 6;
	
		//Book	
		static const Text bookDB;
		static const int  BOOK_ARG_COUNT= 5;

		//Newspaper
 		static const Text newspaperDB;
		static const int  NEWSPAPER_ARG_COUNT= 5;

		//Periodical
		static const Text periodicalDB;
		static const int  PERIODICAL_ARG_COUNT= 4;

		//Lost
		static const Text lostDB;
		static const int  LOST_ARG_COUNT= 4;
		//Transaction
		static const Text transactionDB;
		static const int  TRANSACTION_ARG_COUNT = 6;
		//Borrow
		static const Text borrowDB;
		static const int BORROW_ARG_COUNT = 5;

		static const Text CLASS_NAME ;
		public:
			Database();
			~Database();
			static Name parseName(Buffer buffer, int lineNumber, const Text *db);
	};
#endif

