Projekte
workwind
Multitasking optimiert
cdll.h
Projekte
Forum
Doku
Öffentliche Projekte
Startseite
Beispielprogramme
Projekte von anderen
Welcome
Username
Passwort
Eingeloggt bleiben
Zugangsdaten vergessen?
Registrieren
Projektverwaltung
⇨ Please choose! ⇦
——————————————————
✎ Create new project...
★ Browse existing projects...
——————————————————
⚬ MotorTest#1
⚬ C Tutorial 8#1
⚬ NIBO2 C Project#1
⚙ C Tutorial 15#1
⚬ 2010_11_18_el_test001#1
Multitask...optimiert
cdll.c
cdll.h
condition.c
condition.h
main.c
mutex.c
mutex.h
scheduler.S
semaphore.c
semaphore.h
thread.c
thread.h
Project details
Compiler settings
Nachrichten
Sie sind nicht eingeloggt.
Neuigkeiten
★
NiboRoboLib 3.6
2017-01-17: Neue Version 3.6
★
NiboRoboLib 3.4.1
2016-04-16: Neue Version 3.4.1
★
Coding Tutorial
2015-11-22: Jetzt auch für den NIBO burger!
Site-Statistic
7426 private projects
385 public projects
16180353 lines compiled
58212 builds
NIBO
@
multitasking_opt/cdll.h [read only]
#ifndef CDLL_H #define CDLL_H #include <stdbool.h> /* CDLL - Circular Double Linked List Bei einer doppelt verketteten Liste gibt es bei jedem Element jeweils einen Zeiger auf den Nachfolger und auf den Vorgänger. Bei dieser Implementation wird aus Optimierungsgründen ein zusätzliches Element, der Listenkopf, in die Liste aufgenommen. Dieses Kopfelement wird jedoch bei der Zählung und abarbeitung ignoriert. Die leere Liste enthält nur das Kopfelement. Durch diesen Trick entfallen alle Sonderfälle beim Löschen und Einfügen von Elementen. Bei der leeren Liste zeigen sowohl der next, wie auch der prev Zeiger des Head Elements wiederum auf das Head Element. sec. last last HEAD first second +--------+ +--------+ +--------+ +--------+ +--------+ -->| next |-->| next |-->| next |-->| next |-->| next |--> <--| prev |<--| prev |<--| prev |<--| prev |<--| prev |<-- +--------+ +--------+ +--------+ +--------+ +--------+ | | | | | | | | | DATA | | DATA | | DATA | | DATA | | | | | | | | | +-- -- --+ +-- -- --+ +-- -- --+ +-- -- --+ */ typedef struct _cdll_s { struct _cdll_s * prev; struct _cdll_s * next; } cdll_t; /** * Listenkopf der CDLL initialisieren * Muss vor der ersten Verwendung einer CDLL-Liste aufgerufen werden! */ void cdll_reset(cdll_t *head); /** * Prüft ob die CDLL-Liste leer ist (also nur aus dem Kopf besteht) */ static inline bool cdll_is_empty(cdll_t *head); /** * Ein Element dem Anfang der CDLL hinzufügen */ void cdll_push_front(cdll_t * head, cdll_t * entry); /** * Ein Element dem Ende der CDLL hinzufügen */ void cdll_push_back(cdll_t * head, cdll_t * entry); /** * Ein Element aus einer beliebigen CDLL entfernen und an den Anfang der übergebenen CDLL setzen */ void cdll_move_front(cdll_t * head, cdll_t * entry); /** * Ein Element aus einer beliebigen CDLL entfernen und an das Ende der übergebenen CDLL setzen */ void cdll_move_back(cdll_t * head, cdll_t * entry); /** * Das erste Element der CDLL entfernen und zurückliefern * Liefert 0 zurück wenn die Liste leer ist */ cdll_t * cdll_pop_front(cdll_t * head); /** * Das letzte Element der CDLL entfernen und zurückliefern * Liefert 0 zurück wenn die Liste leer ist */ cdll_t * cdll_pop_back(cdll_t * head); /** * Dieses Element aus seiner Liste entfernen */ void cdll_remove(cdll_t * entry); /** * Prüfen ob dieses Element in der Liste enthalten ist */ bool cdll_contains(cdll_t * head, cdll_t * entry); /** * Das erste Element der CDLL zurückliefern * Liefert 0 zurück wenn die Liste leer ist */ static inline cdll_t * cdll_peek_front(cdll_t * head); /** * Das letzte Element der CDLL zurückliefern * Liefert 0 zurück wenn die Liste leer ist */ static inline cdll_t * cdll_peek_back(cdll_t * head); /* *** INLINE IMPLEMENTATIONS *** */ static inline bool cdll_is_empty(cdll_t *head) { // assert (head!=0) // (wenn head->next==head dann ist auch head->prev==head !!) return head->next==head; } static inline cdll_t * cdll_peek_front(cdll_t * head) { // assert (head!=0) if (head->next==head) { return (cdll_t *) 0; } return head->next; } static inline cdll_t * cdll_peek_back(cdll_t * head) { // assert (head!=0) if (head->prev==head) { return (cdll_t *) 0; } return head->prev; } #endif
Compiler results:
Werbung
Online
almeda92990951273114
dtsjada1842883129
elidabaylee669745
giahill891542995
janinalomax603906209
jeanniebland8449
kimlindberg1853496