00001 /*************************************************************************** 00002 * Copyright (C) 2008 by Sverre Rabbelier * 00003 * sverre@rabbelier.nl * 00004 * * 00005 * This program is free software; you can redistribute it and/or modify * 00006 * it under the terms of the GNU General Public License as published by * 00007 * the Free Software Foundation; either version 3 of the License, or * 00008 * (at your option) any later version. * 00009 * * 00010 * This program is distributed in the hope that it will be useful, * 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00013 * GNU General Public License for more details. * 00014 * * 00015 * You should have received a copy of the GNU General Public License * 00016 * along with this program; if not, write to the * 00017 * Free Software Foundation, Inc., * 00018 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 00019 ***************************************************************************/ 00020 00021 #pragma once 00022 00028 #include <string> 00029 #include <vector> 00030 #include <map> 00031 #include <stdexcept> 00032 #include <set> 00033 00034 #include <sqlite3.h> 00035 00036 #include "smart_ptr.h" 00037 #include "singleton.h" 00038 #include "Exceptions.h" 00039 #include "Assert.h" 00040 00042 typedef unsigned long value_type; 00043 00045 typedef std::set<value_type> value_types; 00046 00048 typedef const std::string& cstring; 00049 00051 typedef std::vector<std::string> Strings; 00052 00053 00054 class Table; 00055 typedef SmartPtr<Table> TablePtr; 00056 typedef std::vector<TablePtr> TableVector; 00058 class TableDef; 00059 typedef SmartPtr<TableDef> TableDefPtr; 00060 typedef std::vector<TableDefPtr> TableDefVector; 00062 class TableImpl; 00063 typedef SmartPtr<TableImpl> TableImplPtr; 00064 typedef std::vector<TableImplPtr> TableImplVector; 00066 class KeyDef; 00067 typedef SmartPtr<KeyDef> KeyDefPtr; 00068 typedef std::vector<KeyDefPtr> KeyDefs; 00070 class KeyImpl; 00071 typedef SmartPtr<KeyImpl> KeyImplPtr; 00072 typedef std::vector<KeyImplPtr> KeyImpls; 00074 class KeyValue; 00075 typedef SmartPtr<KeyValue> KeyValuePtr; 00077 class Field; 00078 typedef SmartPtr<Field> FieldPtr; 00079 typedef std::vector<FieldPtr> FieldVector; 00081 class FieldDef; 00082 typedef SmartPtr<FieldDef> FieldDefPtr; 00083 typedef std::vector<FieldDefPtr> FieldDefVector; 00085 class FieldImpl; 00086 typedef SmartPtr<FieldImpl> FieldImplPtr; 00087 typedef std::vector<FieldImplPtr> FieldImplVector; 00089 class FieldValue; 00090 typedef SmartPtr<FieldValue> ValuePtr; 00091 typedef SmartPtr<FieldValue> FieldValuePtr; 00100 typedef std::map<std::string, TablePtr> TableMap; 00101 00103 typedef std::map<KeyImpl*, KeyValuePtr> KeyImplMap; 00104 00106 typedef std::map<FieldImpl*, ValuePtr> FieldValueMap; 00107 00109 typedef std::map<FieldImpl*, ValuePtr> ValueMap; 00110 00111 00112 class Keys; 00113 typedef SmartPtr<Keys> KeysPtr; 00115 class FieldValues; 00116 typedef SmartPtr<FieldValues> ValuesPtr; 00117 typedef SmartPtr<FieldValues> FieldValuesPtr; 00119 class SavableManagers; 00120 typedef SmartPtr<SavableManagers> SavableManagersPtr; 00123 class SavableManager; 00124 typedef SmartPtr<SavableManager> SavableManagerPtr; 00125 typedef std::vector<SavableManagerPtr> SavableManagerVector; 00127 class SelectionMask; 00128 typedef SmartPtr<SelectionMask> SelectionMaskPtr; 00130 class Relation; 00131 typedef SmartPtr<Relation> RelationPtr; 00132 typedef std::vector<RelationPtr> Relations; 00134 class Join; 00135 typedef SmartPtr<Join> JoinPtr; 00136 typedef std::vector<JoinPtr> Joins; 00138 class Actor; 00139 typedef SmartPtr<Actor> ActorPtr; 00141 class UBSocket; 00142 00143 class Savable; 00144 typedef SmartPtr<Savable> SavablePtr;