{"id":16287152,"url":"https://github.com/bandysc/jinp_2_cdeque","last_synced_at":"2025-04-09T05:19:09.213Z","repository":{"id":74061371,"uuid":"71131347","full_name":"BAndysc/JINP_2_cdeque","owner":"BAndysc","description":"Drugi projekt na zaliczenie kursu C++ (biblioteka napisana w c++ do c)","archived":false,"fork":false,"pushed_at":"2016-10-27T20:55:36.000Z","size":42,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-14T23:44:19.139Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BAndysc.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-17T11:32:45.000Z","updated_at":"2017-03-12T16:18:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"312d9f5e-dac5-42e0-9b47-0ee8ea2e4ea1","html_url":"https://github.com/BAndysc/JINP_2_cdeque","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BAndysc%2FJINP_2_cdeque","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BAndysc%2FJINP_2_cdeque/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BAndysc%2FJINP_2_cdeque/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BAndysc%2FJINP_2_cdeque/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BAndysc","download_url":"https://codeload.github.com/BAndysc/JINP_2_cdeque/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247981089,"owners_count":21027861,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T19:44:29.076Z","updated_at":"2025-04-09T05:19:09.191Z","avatar_url":"https://github.com/BAndysc.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Biblioteka standardowa języka C++ udostępnia bardzo przydatne kontenery (np.\nmap i deque), których nie ma w bibliotece C. Kontener deque (kolejka\ndwustronna) jest alternatywą dla kontenera vector, pozwalającą na wstawianie\nelementów na początku i na końcu w (amortyzowanym) czasie stałym.\n\nCzęsto potrzebujemy łączyć kod C++ z kodem spadkowym w C. Celem tego zadania\njest napisanie w C++ dwóch modułów obsługujących kolejki dwustronne ciągów\nznaków, tak aby można ich było używać w C. Każdy moduł składa się z pliku\nnagłówkowego (z rozszerzeniem h) i pliku z implementacją (z rozszerzeniem cc).\n\nModuł strdeque (pliki strdeque.h i strdeque.cc) powinien udostępniać\nnastępujące funkcje:\n\nunsigned long strdeque_new();\n\n    Tworzy nową, pustą kolejkę dwustronną ciągów znaków i zwraca jej\n    identyfikator.\n\nvoid strdeque_delete(unsigned long id);\n\n    Jeżeli istnieje kolejka dwustronna o identyfikatorze id, usuwa ją,\n    a w przeciwnym przypadku nic nie robi.\n\nsize_t strdeque_size(unsigned long id);\n\n    Jeżeli istnieje kolejka dwustronna o identyfikatorze id, zwraca liczbę jej\n    elementów, a w przeciwnym przypadku zwraca 0.\n\nvoid strdeque_insert_at(unsigned long id, size_t pos, const char* value);\n\n    Jeżeli istnieje kolejka dwustronna o identyfikatorze id oraz value != NULL,\n    wstawia element value przed pozycją pos lub na koniec kolejki, jeżeli pos\n    wykracza poza kolejkę.\n    Gwarancje odnośnie kosztów wstawienia na początku, na końcu i w środku\n    mają być takie same jak w przypadku kontenera deque (plus koszt\n    odnalezienia kolejki o danym identyfikatorze).\n    Jeżeli kolejka dwustronna nie istnieje lub value == NULL, to nic nie robi.\n    Pozycje w kolejce numerowane są od zera.\n\nvoid strdeque_remove_at(unsigned long id, size_t pos);\n\n    Jeżeli istnieje kolejka dwustronna o identyfikatorze id i pos nie wykracza\n    poza nią, usuwa element na pozycji pos, a w przeciwnym przypadku nic nie\n    robi.\n\nconst char* strdeque_get_at(unsigned long id, size_t pos);\n\n    Jeżeli istnieje kolejka dwustronna o identyfikatorze id i pos nie wykracza\n    poza kolejkę, zwraca wskaźnik do elementu na pozycji pos, a w przeciwnym\n    przypadku zwraca NULL.\n\nvoid strdeque_clear(unsigned long id);\n\n    Jeżeli istnieje kolejka dwustronna o identyfikatorze id, usuwa wszystkie\n    jej elementy, a w przeciwnym przypadki nic nie robi.\n\nint strdeque_comp(unsigned long id1, unsigned long id2);\n\n    Porównuje leksykograficznie kolejki dwustronne o identyfikatorach\n    id1 i id2, zwracając\n     -1, gdy kolejka(id1) \u003c kolejka(id2),\n      0, gdy kolejka(id1) = kolejka(id2),\n      1, gdy kolejka(id1) \u003e kolejka(id2).\n    Jeżeli kolejka dwustronna o którymś z identyfikatorów nie istnieje, to jest\n    traktowana jako leksykograficznie równa liście pustej.\n\nModuł strdequeconst (pliki strdequeconst.h i strdequeconst.cc) powinien\nudostępniać funkcję:\n\nunsigned long emptystrdeque();\n\n    Zwraca identyfikator pustej kolejki dwustronnej, do której nic nie można\n    wstawiać i z której nic nie można usuwać.\n\nModuły strdeque i strdequeconst powinny sprawdzać poprawność parametrów\ni wykonania funkcji za pomocą asercji i wypisywać na standardowy strumień\nbłędów informacje diagnostyczne. Kompilowanie z parametrem -DNDEBUG powinno\nwyłączać sprawdzanie i wypisywanie.\n\nPrzykład użycia znajduje się w pliku strdeque_test1.c. Przykład informacji\nwypisywanych przez strdeque_test1 znajduje się w pliku strdeque_test1.err.\nAby umożliwić używanie modułów strdeque oraz strdequeconst w języku C++,\nprzygotuj pliki nagłówkowe cstrdeque oraz cstrdequeconst, które umieszczają\ninterfejsy modułów, odpowiednio, strdeque i strdequeconst w przestrzeni nazw\njnp1. Przykład użycia znajduje się w plikach strdeque_test2a.cc\ni strdeque_test2b.cc.\n\nKompilowanie przykładów:\n\ng++ -c -Wall -O2 -std=c++14 strdeque.cc -o strdeque.o\ng++ -c -Wall -O2 -std=c++14 strdequeconst.cc -o strdequeconst.o\ngcc -c -Wall -O2 strdeque_test1.c -o strdeque_test1.o\ng++ -c -Wall -O2 -std=c++14 strdeque_test2a.cc -o strdeque_test2a.o\ng++ -c -Wall -O2 -std=c++14 strdeque_test2b.cc -o strdeque_test2b.o\ng++ strdeque_test1.o strdeque.o strdequeconst.o -o strdeque_test1\ng++ strdeque_test2a.o strdeque.o strdequeconst.o -o strdeque_test2a\ng++ strdeque_test2b.o strdeque.o strdequeconst.o -o strdeque_test2b\n\nOczekiwane rozwiązanie powinno korzystać z kontenerów i metod udostępnianych\nprzez standardową bibliotekę C++. Nie należy definiować własnych struktur lub\nklas. Do implementacji kolejek należy użyć standardowego typu\nstd::deque\u003cstd::string\u003e. W szczególności nie należy przechowywać przekazanych\nprzez użytkownika wskaźników const char* bezpośrednio, bowiem użytkownik może\npo wykonaniu operacji modyfikować dane pod uprzednio przekazanym wskaźnikiem\nlub zwolnić pamięć. Na przykład poniższy kod nie powinien przerwać się z powodu\nniespełnionej asercji:\n\n    unsigned long deq;\n    char buf[4] = \"foo\";\n    deq = strdeque_new();\n    strdeque_insert_at(deq, 0, buf);\n    buf[0] = 'b';\n    assert(strdeque_get_at(deq, 0) != NULL);\n    assert(strncmp(strdeque_get_at(deq, 0), \"foo\", 4) == 0);\n    assert(strncmp(strdeque_get_at(deq, 0), \"boo\", 4) != 0);\n\nNależy ukryć przed światem zewnętrznym wszystkie zmienne globalne i funkcje\npomocnicze nienależące do wyspecyfikowanego interfejsu modułu.\nW rozwiązaniu nie należy nadużywać kompilacji warunkowej. Fragmenty tekstu\nźródłowego realizujące wyspecyfikowane operacje na kolejkach nie powinny\nzależeć od sposobu kompilacji – parametr -DNDEBUG lub jego brak (inaczej\nposiadanie wersji diagnostycznej nie miałoby sensu).\n\nUwaga! W rozwiązaniu zadania obsługa standardowego wyjścia błędów powinna być\nrealizowana z użyciem strumieni C++ (tzn. biblioteki iostream).\n\nRozwiązanie powinno zawierać pliki strdeque.h, strdeque.cc, strdequeconst.h,\nstrdequeconst.cc, cstrdeque, cstrdequeconst. Pliki te należy umieścić\nw repozytorium w katalogu\n\ngrupaN/zadanie2/ab123456+cd123456\n\nlub\n\ngrupaN/zadanie2/ab123456+cd123456+ef123456\n\ngdzie N jest numerem grupy, a ab123456, cd123456, ef123456 są identyfikatorami\nczłonków zespołu umieszczającego to rozwiązanie.\nKatalog z rozwiązaniem nie powinien zawierać innych plików, ale może zawierać\npodkatalog private, gdzie można umieszczać różne pliki, np. swoje testy. Pliki\numieszczone w tym podkatalogu nie będą oceniane.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbandysc%2Fjinp_2_cdeque","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbandysc%2Fjinp_2_cdeque","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbandysc%2Fjinp_2_cdeque/lists"}