/generic-array

generic array for 3 types of structures, each with different data types

Primary LanguageC

----main----
Doar ca sa clarific in main len este lungimea vectorului in octeti si count 
este numarul elemtelor, tin sa clarific deoarece in unele functii count este
folosit si ca lungimea octetilor.

In main am inceput cu alocarea structurii si a headerului, apoi intru
intru while(1) care citeste din stdin pana la comanda exit.
Pentru fiecare sir de caractere pe care l-am folosit am alocat dinamic 
inainte de a introduce orice valoare, motiv pentru care
am folosit acele while-uri care se plimba prin linie si contorizeaza numarul
spatiilor pe care il folosesc in a stabili lungimea sirurilor.
Dupa intru in citirea efectiva a componentelor structurii cu 
ajutorul functiei sscanf, care mi s-a parut mult mai stabila
decat functia strtok, chiar daca am citit de mai multe ori aceleasi adrese. 
Daca functia este insert_at se citeste indexul in plus.
Apoi verific tipul structurii dupa care introduc tipul, lungimea care este 
lungimea sirurilor + suma int-urilor, apoi aloc dinamic pointerul catre date, 
dupa care mut octetii din valorile citite mai devreme in data. Apoi intru in 
cele una din cele 2 functii: insert sau insert_at si maresc numarul elementelor cu 1;

----insert----
In insert aloc vectorul daca este gol, si daca are deja elemente realoc vectorul
cu len + lungimea elementelor din structura, unde len este lungimea in octeti.
Apoi adaug in vector pe rand elementele structurii, cresc lungimea initial 
cu cea adaugata si ma intorc in main.

----insert_at----
La insert_at, dar si delete_at si find folosesc aceleasi medota de a
 plimba pana la indexul de care am nevoie, mai exact
primesc ca parametru numarul elementelor si cu un for de la 1 la index 
cresc un count care creste la fiecare pas cu lungimea
elementului respectiv. Aici am un count_before care retine numarul octetilor 
pana la locatia de unde incep sa adaug octeti,
si count_after care retine de la aceleasi punct pana la sfarsit.
Vectorul este realocat cu lungimea initiala(count_after + count_before) +
lungimea elementului care trebuie adaugat.
Apoi se muta tot continutul de dupa index cu distanta fiind lungimea elementului
care trebuie adaugat. Mutarea se face de la capat spre inceput deoarece in sens 
invers ar fi schimbat valori gresite cand ajunge la octetii care au fost deja mutati.
Apoi in locul liber creat, care este fix lungimea necesara, se muta din structura datele necesare.

----find----
La find count-ul are rolul lui count_before de la insert_at, il folosesc 
pentru a apela functia print de la count_before doar pe primul element.

----delete_at----
Aici aflu din nou cele doua lungimi count_after si count_before, in
schimb aici mut toate date de dupa elementulul care urmeaza a fi 
sters in spate cu lungimea sa, apoi realoc dinamic cu 
lungimea initiala - lungimea elementului.

----print----
In print am folosit o variabila auxiliara pentru fiecare lucru pe care il 
afisez adica un char pentru tip doua siruri pentru nume,
si, in functie de tip cele doua bancnote. Cu ajutorul variabilei count retin 
pozitia octetului la care am ajuns.