TEI2-Aufgabenblatt3/Aufgabe1_2.cpp

100 lines
2.8 KiB
C++
Raw Normal View History

2024-05-30 22:08:15 +02:00
#include <iostream>
2024-05-30 15:23:13 +02:00
2024-05-30 22:08:15 +02:00
// Template für flexiblen Array Typ
template <typename T>
class Container {
2024-05-31 11:41:34 +02:00
public:
2024-05-30 22:08:15 +02:00
// T-Pointer für Inhalt des Array
T* data;
// int für Größe des Array
int arr_size;
2024-05-30 15:23:13 +02:00
2024-05-30 22:08:15 +02:00
// Methode für Umkopieren in neues Array
void updateSize(int new_arr_size) {
// Reservierung von Speicher mit T-Pointer für Übergangsarray mit benötigter Größe
T* new_data = new T[new_arr_size];
// Füllen des Übergangsarray mit Array Inhalt
for (int i = 0; i < arr_size; i++) {
new_data[i] = data[i];
}
// Speicherfreigabe von altem Array
delete[] data;
// Array Inhalt von Objekt Instanz auf T-Pointer von Übergangsarray linken
data = new_data;
// Aktualisieren der Array Größe der Instanz
arr_size = new_arr_size;
}
// Konstruktor mit Anfangsarraygröße als Parameter
Container(int initial_arr_size){
// Array Größe der Instanz initialisieren
arr_size = initial_arr_size;
// Speicherreservierung für Array Inhalt
data = new T[initial_arr_size];
}
// Destruktor
~Container() {
// Speicherfreigabe von Array Inhalt
2024-05-31 12:55:46 +02:00
// delete[] data;
2024-05-30 22:08:15 +02:00
}
// Überladung des [] Operators
T& operator[](int index) {
// Aktualisierung auf neue Größe, falls nötig
if (index >= arr_size) {
updateSize(index + 1);
}
// Eigentliche Rückgabe des Inhalt an Stelle des Index
return data[index];
}
// Methode zur Rückgabe der Array Größe
int getArraySize() {
return arr_size;
}
};
2024-05-31 12:55:46 +02:00
Container<char> readWavFile(){
2024-05-30 22:08:15 +02:00
2024-05-31 12:55:46 +02:00
// Erstellen der Klasseninstanz mit Konstruktor
2024-05-31 11:41:34 +02:00
Container<char> wavData(0);
// Pointer auf test.wav
FILE* input;
// Variable zum Abspeichern von Byte Größe der wav Datei
long num_bytes;
// Öffnen der test.wav Datei in input mit Leserechten
input = fopen("test.wav", "r");
2024-05-30 22:08:15 +02:00
2024-05-31 11:41:34 +02:00
// Wenn test.wav Datei nicht existiert Abbruch
if(input == NULL)
return 1;
// Setzen von FILE Pointer auf Ende der Datei
fseek(input, 0, SEEK_END);
// Abspeichern der Byte Größe mithilfe von input Pointer Position
num_bytes = ftell(input);
// Rücksetzen von FILE Pointer auf Anfang der Datei
fseek(input, 0, SEEK_SET);
// Überladener [] Operator zur dynamischen Speicherreservierung
wavData[num_bytes*sizeof(char)-1];
// Einlesen der Datei mit num_bytes * sizeof(char) und Abspeichern in wavData Array
fread(wavData.data, sizeof(char), num_bytes, input);
// Freigabe des FILE Pointer
fclose(input);
2024-05-31 12:55:46 +02:00
return wavData;
};
int main() {
std::cout << "wavData: " << readWavFile().getArraySize() << std::endl;
2024-05-30 22:08:15 +02:00
return 0;
};