Di seguito è riportato il disegno, che è implementato in modo simile al design utilizzato in Linux/net/socket.c .
Il design sottostante fornisce List astrazione,
dove,list.hforniscel'interfacciaList,mostra
Background:
Reason to implement
Listabstraction in this approach is to consider as a prototype inspired fromLinux/net/socket.cdesign, where any one of the multiple protocol family implementations(likenet/ipv4/af_inet.cornet/unix/af_unix.c/..) is available on invokingsocket(AF_INET | AF_UNIX | AF_XYZ,,)api.This prototype would help understand implementing snmp library that talks to multiple network elements(Router/Switch/Server) using snmp protocol.
Il design sopra (mostrato nell'immagine sopra) è un'analogia con Linux/net/socket.c come mostrato in questo codice qui con una leggera differenza nel tempo di collegamento (fase linker) a differenza delle implementazioni di collegamento in Linux/net/socket.c avviene in fase di caricamento sostituendo _init() codice di esecuzione in esecuzione (ad esempio af_inet.c ) e invoca sock_register()
Per migliorare ulteriormente questa analogia,
Sto pensando di migliorare il design (mostrato nell'immagine sopra), che può consentire a createList(ARRAY_IMPL) di essere chiamato da fileIO/fileReading.c (per il proprio scopo) e createList(LINKED_LIST_IMPL) ottenere chiamato da ST/implUsingList.c (per il proprio scopo).
Con il design attuale (mostrato nell'immagine sopra), si rompe lo scopo, in quanto funziona con qualsiasi implementazione (ad esempio arrayImpl.c ) collegata alla fase del linker.
Motivo: ListHandler *handler = NULL; è la variabile globale definita in virtualImplLayer.c e viene sovrascritta su ogni chiamata a createList(ImplType) , come mostrato in questo codice here
La mia domanda:
Come migliorare questo design prototipo per scegliere più implementazioni per lo scenario del cliente (mostrato nell'immagine)? Richiede il multi-threading al livello di implementazione virtuale ??
