FS2 classes


// fs2.h
// Programat de Barboi Ioan Mihail, ANUL I, Informatica ID/IFR, FMI::UNIBUC - 2011-2012
// Copyright (C), 1996-2011-2012, AlphaX (R) Team, Romania, EU
// thanks : fmi.unibuc.ro, ocw.mit.edu, elth.pub.ro, wiki,freebasic.net, ichb, sc24

//fs2.h : FileSystemD2 generation 2 ; cachec class too
// Based on my previous project FileSystemD which i've posted on sourceforge.net

//template portat si updatat la C++ ; functiile de cache originale le-am dezvoltat pt programul meu FS in limbajul FreeBASIC32bit. {pt tot proiectul "FS" vizitati http://filesystemd.sourceforge.net {by Mihai Barboi}}
//portarea a fost din pricina ca forta de munca din Romania nu ofera joburi pt cunoscatori de freebasic32;
//pt a continua cu freebasic ar trebui sa devin freelancer intr-un domeniu in care am nevoie de o echipa => o groaza de $$$ => nu imi permit
//Cu toate astea limajul freebasic32 ramane pt mine fovorit si il folosesc in majoritatea proiectelor mele principale
//Sigurle diferenta la ora actuala 20/martie/2012, intre C++ si FreeBasic32 este ca
// freebasic32 implemeteaza absolut tot ce exista in limbajul "C" simplu dar nu in totalitate si tot ce sa implemetat in "C++"
// freebasic32 face parte din grupa (middle/high)-level {"freepascal32","gcc","djgpp","mingw"}, permitand utilizarea inline a libajului de asamblare, folosind acelasi assembler/linker GNU : as/ld
// este multi platforma {win32/linux/dox/xbox}, are foarte bun/mult suport; din nou singurul minus fata de "freepascal" si "gcc" este ca inca nu implementeaza official "class"ele in modul C++; deasemenea nu exista oficial si versiuni pt ARM/POWERPC ...


/* diagrama de apel
NOTATIE: in citirea/scrierea de structuri se intelege : citire/scriere SECTOARE; folosirea tipului [structura] permite definirea unor blocuri de lungime diferiata pt un sector(512bytesPerSector/2048bytesPerSector/etc) [sau chair a unei structuri abstracte de date]
explicitare:
-reader_class
a. ofera: functii abstracte pt citire/scriere structuri[sectoare]; integrare in/cu driverul de sisteme de fisiere al sistmului de operare gazda
b. foloseste: clasa "cache_class" pt cache de structuri
c. are nevoie de [mosteneste de la] : fara mosteniri
d. optional: poate folosi functiile de citire/scriere structuri[sectoare] oferite de o clasa de drivere de hardware [hardware_driver_class]
-cache_class
a. ofera: sistem paginat de cache optim de structuri pt sistem I/O de dimesiune mare[<=2TB]/medii[~GB]/mici[sute MB] prin functii abstarcte de citire/scriere structuri
b. foloseste: clasa "reader_class" ca clasa de interfata pt citire directa de structuri[sectoare]
c. are nevoie de [mosteneste de la] : fara mosteniri
-filesystem_class
a. ofera: un de integrare a stucturilor[sectoarelor]; pointerii la functii standard de fisiere [creare,stergere,citire,scriere]
b. foloseste: clase de interfata cu tipuri de aranjare/traducere a structurilor: clasa fat32_class, clasa iso9660_class, clasa ext2_class etc...
c. are nevoie de [mosteneste de la] : clasa "reader_class"
d. permite neglijarea : lungimea unei structuri[sector], modul de aranjarea a structurilor
-drives_class
a. ofera: un sistem de integrare a mai multor clase "filesystem_class" si a unor interfete ce permit transferul de date intre doua sau mai multe clase "filesystem_class" [copyfile,recursivecopy,etc]
b. foloseste: clasa "filesystem_class"
c. are nevoie de [mosteneste de la] : fara mosteniri
d. permite neglijarea : folosirii unui singur tip de sistem de fisiere; neglijeaza stuctura sistemelor de fisire
-fat32_class / iso9660_class / etc2_class / ... etc
a. ofera: functii publice pt manipulare fisiere/directoare (creeare,stergere,citire,scriere,cautare) specifice sistemului de fisiere selectat [fat32/iso/ext/...]
b. foloseste: functii (pointeri la) de citire/scriere structuri de date[sectoare]; access optional printr-un adaptor de partitii[MBR_CLASS | 3G_CLASS | ???_CLASS] la o clasa "reader_class"
c. are nevoie de [mosteneste de la] : fara mosteniri
d. permite neglijarea : altor sisteme de structuri;
-mbr_class / 3g_class / ???_class etc
a. ofera: discernere intre tipuri de partii; enumera partitiile valide inclusiv partitiile extinse; selector de partitii
b. foloseste: reader_class
c. are nevoie de [mosteneste de la] : fara mosteniri

-[optional] hardware_driver_class
a. ofera: functii pt citire/scriere structuri specifice[sectoare]
b. foloseste: access direct la anumite componente hardware, alte clase hardware_driver [ca de pilda un driver de ATA/IDE va folosi o clasa DMA,PCI_BUS,INTERRUPTS,...]
c. are nevoie de [mosteneste de la] : depinde
d. permite neglijarea : claselor de nivel superior (neglijarea drives_class, filesystem_class, etc...)

se pot implementa si alte clase cu aplicatii specifice :
de pilda:
- clasa "check_disk_class" pt verificat corectitudinea datelor, incadrarea in constrangeri [clasa ce va folosi drives_class/filesystem_class sau direct reader_class]
- clasa "drive_commander_class" o interfate IDE de navigare prin foldere/fisire [gen NC,MC,DC...] [clasa ce va folosi drives_class]
- clasa "disk_defragment_or_chrunk_class" pt defragmentarea anumitor tipuri de sisteme de fisiere sau pt COMPACTAREA datelor din anumite tipuri de fisirer [clasa va folosit filesystem_class]
- clasa "disk_editor_class" pt acesarea/editarea/recuperarea avansata de structuri interne ale unui anumit tip de sistem de fisier [clasa va folosi "filesystem_class" si "reader_class" si optional si "cache_class"]
- clasa "virtual_driver_class" pt creare de interfere virtuale de drivere prin care se pot monta imagini de sisteme... sau cu alte scopuri[o interfata care citeste secventiale de la un port USB de pilda]
- clasa "tcpip_class" pt acesarea de la distanta prin intermediul (internetului)/(retelei locala) a unui sistem de fisiere folosind protocolul TCP/IP
- clasa "p2p_class" pt folosirea unei conexiuni de tip peer2peer (acelasi sistem folosit pt torrente, sistem folosit in unitatile militare/politie etc ...]
- clasa "encript_class" pt folosirea encriptarii/decriptarii de structuri[sectoare]
- clasa "compress_class" pt comprimarea(arhivarea) de structuri [sectoare]
*/

//----------------------------------------------------------------------------------------------