kwave  18.07.70
RepairVirtualAudioFile.cpp
Go to the documentation of this file.
1 /*************************************************************************
2  RepairVirtualAudioFile.cpp - emulation of a repaired sane audio file
3  -------------------
4  begin : Sun May 12 2002
5  copyright : (C) 2002 by Thomas Eschenbacher
6  email : Thomas.Eschenbacher@gmx.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "config.h"
19 
20 #include <QFile>
21 #include <QIODevice>
22 
23 #include "RecoverySource.h"
24 #include "RepairVirtualAudioFile.h"
25 
26 //***************************************************************************
28  QList<Kwave::RecoverySource *> *repair_list)
29  :Kwave::VirtualAudioFile(device), m_position(0),
30  m_repair_list(repair_list)
31 {
32 }
33 
34 //***************************************************************************
36 {
37  if (m_repair_list) {
38  while (!m_repair_list->isEmpty()) {
39  Kwave::RecoverySource *src = m_repair_list->takeLast();
40  if (src) delete src;
41  }
42  delete m_repair_list;
43  }
44 }
45 
46 //***************************************************************************
47 qint64 Kwave::RepairVirtualAudioFile::read(char *data, unsigned int nbytes)
48 {
49  Q_ASSERT(m_repair_list);
50  Q_ASSERT(data);
51  if (!m_repair_list) return 0;
52  if (!nbytes) return 0;
53  if (!data) return 0;
54 
55  bzero(data, nbytes);
56  qint64 read_bytes = 0;
57  foreach (Kwave::RecoverySource *src, *m_repair_list) {
58  Q_ASSERT(src);
59  if (!src) continue;
60  qint64 len = src->read(m_position, data, nbytes);
61  Q_ASSERT(len <= nbytes);
62  nbytes -= len;
63  m_position += len;
64  data += len;
65  read_bytes += len;
66 
67  if (!nbytes) break;
68  }
69 
70  return read_bytes;
71 }
72 
73 //***************************************************************************
75 {
76  Q_ASSERT(m_repair_list);
77  if (!m_repair_list) return 0;
78  Kwave::RecoverySource *last = m_repair_list->last();
79  Q_ASSERT(last);
80  if (!last) return 0;
81 
82  return static_cast<qint64>(last->offset() + last->length());
83 }
84 
85 //***************************************************************************
86 qint64 Kwave::RepairVirtualAudioFile::write(const char *data,
87  unsigned int nbytes)
88 {
89  Q_UNUSED(data);
90  Q_UNUSED(nbytes);
91  qWarning("RepairVirtualAudioFile::write() is forbidden !");
92  return 0;
93 }
94 
95 //***************************************************************************
96 qint64 Kwave::RepairVirtualAudioFile::seek(qint64 offset, bool is_relative)
97 {
98  if (is_relative)
99  m_position += offset;
100  else
101  m_position = offset;
102 
103  return (m_position < length()) ? m_position : -1;
104 }
105 
106 //***************************************************************************
108 {
109  return m_position;
110 }
111 
112 //***************************************************************************
113 //***************************************************************************
virtual quint64 length() const
virtual qint64 read(quint64 offset, char *data, unsigned int bytes)=0
virtual qint64 write(const char *data, unsigned int nbytes) Q_DECL_OVERRIDE
Definition: App.h:33
RepairVirtualAudioFile(QIODevice &device, QList< Kwave::RecoverySource *> *repair_list)
virtual quint64 offset() const
virtual qint64 tell() Q_DECL_OVERRIDE
QList< Kwave::RecoverySource * > * m_repair_list
virtual qint64 read(char *data, unsigned int nbytes) Q_DECL_OVERRIDE
virtual qint64 seek(qint64 offset, bool is_relative) Q_DECL_OVERRIDE
virtual ~RepairVirtualAudioFile() Q_DECL_OVERRIDE
virtual qint64 length() Q_DECL_OVERRIDE