Wpis z mikrobloga

Hej, programiści15k,
Czy jest w standardowym C/C++ coś w rodzaju strumienia do zapisu w pamięci? Chodzi mi o to, żeby do jednego ciągłego bufora można było wrzucać sobie dużo różnych danych po kolei i potem przekazywać cały ten bufor gdzieś dalej. Teoretycznie mogę sam sobie napisać taki prosty bufor, ale może jest już coś gotowego.

#programowanie #programista15k #cpp #jezykc
  • 16
ciągłego bufora

dużo różnych danych

@MostlyRenegade: w buforze też musisz określić przechowywany typ. imo chcesz ładować do std::vector<uint8_t>, tylko musisz sobie zaklepać serializację/deserializację tych swoich typów

jeżeli nie chcesz serializować, to std::vector<std::variant<TypA, TypB, TypC...>>
@zetisdead: hmm, ale z tego co czytam, nie ma prostego dostępu do całego bufora danych bez pisania własnej obsługi albo generowania kopii całego bufora w pamięci, a ja właśnie ten problem chciałem rozwiązać ( ͡° ͜ʖ ͡°)

@MamCieNaHita: no właśnie nie muszę. Mogę wszystko zrzutować na char*, bo i tak w takiej postaci dostaję to z API, z którego korzystam.
@Feargan: tak samo jeśli nie wiesz ile będzie docelowo elementów, ale przyjmijmy na tę chwilę, że rozmiar całego potrzebnego bufora jest znany.

Żeby przybliżyć problem, wrzucę wam ilustrację:

Jest sobie (bardzo prymitywne jak na XXI wiek) API, które zwraca obiekty w strukturach. W strukturze mogą znajdować się typy prymitywne, inne struktury lub tablice:


// typowa struktura danych
struct API_Obj {
int struct1count;
int struct2count;
int doublesCount;
API_Struct1** struct1;
API_Struct2** struct2;
double**
no właśnie nie muszę. Mogę wszystko zrzutować na char*, bo i tak w takiej postaci dostaję to z API,

Jest sobie (bardzo prymitywne jak na XXI wiek) API, które zwraca obiekty w strukturach.


@MostlyRenegade: Jak dla mnie to miotasz się w zeznaniach. Jeżeli dostajesz dane w postaci binarnej to zapewne chcesz zrobić deserializację. A jeśli dostajesz gotową strukturę wielkokrotnie, to nie rozumiem dlaczego nie można użyć std::vector.
wygląda jak potrzeba użycia MemoryStream z csharp ale w c/c++ nie ma takiego tworu.


@zibizz1: właśnie o takie coś mi chodziło i tego się właśnie obawiałem.
Trudno, sam sobie napiszę jakiś prosty bufor.

@Tytanowy: Nie dostaję jednakowej struktury wielokrotnie. Tzn. nie taką, jaka mi jest potrzebna. W strukturze Obj masz wskaźniki (a faktycznie to są relokowalne uchwyty) do tablic o różnych rozmiarach, a ja chcę mieć w buforze dane z
@MostlyRenegade: cóż w zależności od systemu/procesora i wielu innych i tak będziesz musiał kopiować, nawet takie int, bo mogłoby być w niewłaściwie zaokrąglonym adresie. Sposobów tego jak takie dane pogrupować, zależy od tego jaki efekt chcesz uzyskac i jak przyjmujesz i analizujesz przyjmowane dane.