LMMS
Loading...
Searching...
No Matches
database.h
Go to the documentation of this file.
1/*
2 * AdPlug - Replayer for many OPL2/OPL3 audio file formats.
3 * Copyright (c) 1999 - 2003 Simon Peter <dn.tlp@gmx.net>, et al.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 *
19 * database.h - AdPlug database class
20 * Copyright (c) 2002 Riven the Mage <riven@ok.ru>
21 * Copyright (c) 2002, 2003 Simon Peter <dn.tlp@gmx.net>
22 */
23
24#ifndef H_ADPLUG_DATABASE
25#define H_ADPLUG_DATABASE
26
27#include <iostream>
28#include <string>
29#include <binio.h>
30
32{
33public:
34 class CKey
35 {
36 public:
37 unsigned short crc16;
38 unsigned long crc32;
39
40 CKey() {};
41 CKey(binistream &in);
42
43 bool operator==(const CKey &key);
44
45 private:
46 void make(binistream &in);
47 };
48
49 class CRecord
50 {
51 public:
52 typedef enum { Plain, SongInfo, ClockSpeed } RecordType;
53
56 std::string filetype, comment;
57
59 static CRecord *factory(binistream &in);
60
62 virtual ~CRecord() {}
63
64 void write(binostream &out);
65
66 bool user_read(std::istream &in, std::ostream &out);
67 bool user_write(std::ostream &out);
68
69 protected:
70 virtual void read_own(binistream &in) = 0;
71 virtual void write_own(binostream &out) = 0;
72 virtual unsigned long get_size() = 0;
73 virtual bool user_read_own(std::istream &in, std::ostream &out) = 0;
74 virtual bool user_write_own(std::ostream &out) = 0;
75 };
76
79
80 bool load(std::string db_name);
81 bool load(binistream &f);
82 bool save(std::string db_name);
83 bool save(binostream &f);
84
85 bool insert(CRecord *record);
86
87 void wipe(CRecord *record);
88 void wipe();
89
90 CRecord *search(CKey const &key);
91 bool lookup(CKey const &key);
92
94
95 bool go_forward();
96 bool go_backward();
97
98 void goto_begin();
99 void goto_end();
100
101private:
102 static const unsigned short hash_radix;
103
105 {
106 public:
107 unsigned long index;
110
112
113 DB_Bucket(unsigned long nindex, CRecord *newrecord, DB_Bucket *newchain = 0);
114 ~DB_Bucket();
115 };
116
119
121
122 unsigned long make_hash(CKey const &key);
123};
124
126{
127public:
129
130protected:
131 virtual void read_own(binistream &in) {}
132 virtual void write_own(binostream &out) {}
133 virtual unsigned long get_size() { return 0; }
134 virtual bool user_read_own(std::istream &in, std::ostream &out) { return true; }
135 virtual bool user_write_own(std::ostream &out) { return true; }
136};
137
139{
140public:
141 std::string title;
142 std::string author;
143
144 CInfoRecord();
145
146protected:
147 virtual void read_own(binistream &in);
148 virtual void write_own(binostream &out);
149 virtual unsigned long get_size();
150 virtual bool user_read_own(std::istream &in, std::ostream &out);
151 virtual bool user_write_own(std::ostream &out);
152};
153
155{
156public:
157 float clock;
158
159 CClockRecord();
160
161protected:
162 virtual void read_own(binistream &in);
163 virtual void write_own(binostream &out);
164 virtual unsigned long get_size();
165 virtual bool user_read_own(std::istream &in, std::ostream &out);
166 virtual bool user_write_own(std::ostream &out);
167};
168
169#endif
Definition database.h:35
unsigned short crc16
Definition database.h:37
void make(binistream &in)
Definition database.cpp:323
unsigned long crc32
Definition database.h:38
CKey()
Definition database.h:40
bool operator==(const CKey &key)
Definition database.cpp:318
Definition database.h:50
virtual bool user_write_own(std::ostream &out)=0
void write(binostream &out)
Definition database.cpp:278
virtual bool user_read_own(std::istream &in, std::ostream &out)=0
std::string comment
Definition database.h:56
bool user_read(std::istream &in, std::ostream &out)
Definition database.cpp:289
virtual unsigned long get_size()=0
virtual void write_own(binostream &out)=0
bool user_write(std::ostream &out)
Definition database.cpp:294
virtual ~CRecord()
Definition database.h:62
CRecord()
Definition database.h:61
std::string filetype
Definition database.h:56
virtual void read_own(binistream &in)=0
RecordType
Definition database.h:52
@ ClockSpeed
Definition database.h:52
@ SongInfo
Definition database.h:52
@ Plain
Definition database.h:52
RecordType type
Definition database.h:54
static CRecord * factory(RecordType type)
Definition database.cpp:247
CKey key
Definition database.h:55
Definition database.h:105
DB_Bucket(unsigned long nindex, CRecord *newrecord, DB_Bucket *newchain=0)
Definition database.cpp:235
DB_Bucket * chain
Definition database.h:109
unsigned long index
Definition database.h:107
~DB_Bucket()
Definition database.cpp:240
CRecord * record
Definition database.h:111
bool deleted
Definition database.h:108
DB_Bucket ** db_linear
Definition database.h:117
bool go_backward()
Definition database.cpp:211
bool load(std::string db_name)
Definition database.cpp:56
void goto_end()
Definition database.cpp:223
unsigned long linear_length
Definition database.h:120
unsigned long make_hash(CKey const &key)
Definition database.cpp:228
bool lookup(CKey const &key)
Definition database.cpp:117
DB_Bucket ** db_hashed
Definition database.h:118
CRecord * get_record()
Definition database.cpp:196
~CAdPlugDatabase()
Definition database.cpp:45
unsigned long linear_index
Definition database.h:120
void wipe()
Definition database.cpp:183
bool insert(CRecord *record)
Definition database.cpp:145
CAdPlugDatabase()
Definition database.cpp:36
bool go_forward()
Definition database.cpp:202
unsigned long linear_logic_length
Definition database.h:120
void goto_begin()
Definition database.cpp:218
bool save(std::string db_name)
Definition database.cpp:87
CRecord * search(CKey const &key)
Definition database.cpp:112
static const unsigned short hash_radix
Definition database.h:102
virtual unsigned long get_size()
Definition database.cpp:412
float clock
Definition database.h:157
virtual void read_own(binistream &in)
Definition database.cpp:402
CClockRecord()
Definition database.cpp:396
virtual bool user_read_own(std::istream &in, std::ostream &out)
Definition database.cpp:417
virtual bool user_write_own(std::ostream &out)
Definition database.cpp:423
virtual void write_own(binostream &out)
Definition database.cpp:407
virtual bool user_write_own(std::ostream &out)
Definition database.cpp:387
virtual void read_own(binistream &in)
Definition database.cpp:363
std::string author
Definition database.h:142
std::string title
Definition database.h:141
virtual unsigned long get_size()
Definition database.cpp:375
virtual bool user_read_own(std::istream &in, std::ostream &out)
Definition database.cpp:380
CInfoRecord()
Definition database.cpp:358
virtual void write_own(binostream &out)
Definition database.cpp:369
virtual unsigned long get_size()
Definition database.h:133
virtual bool user_read_own(std::istream &in, std::ostream &out)
Definition database.h:134
virtual bool user_write_own(std::ostream &out)
Definition database.h:135
virtual void write_own(binostream &out)
Definition database.h:132
virtual void read_own(binistream &in)
Definition database.h:131
CPlainRecord()
Definition database.h:128
unsigned f
Definition inflate.c:1572
float in
Definition lilv_test.c:1460
float out
Definition lilv_test.c:1461
ZCONST char * key
Definition crypt.c:587