[Kos-dev] Table des methodes au niveau de l'interface ? Etrange ...

Thomas Petazzoni kos-dev@enix.org
19 Feb 2002 12:37:58 +0100


Salut,

J'ai pense a un truc : mettre la table des methodes au niveau de
l'interface ce n'est peut etre pas ce qu'il y a de mieux !

En effet, soit le bout de code suivant (extrait de block.h puis
disk.h) :

/* Definition de la table des methodes de l'interface block */
typedef struct block_methods_s
{
  shadow_resource_t *(*open_raw)(translator_t *trans);
  int (*read_raw)(shadow_resource_t *sr, char *buffer, int block_nb);
  int (*read)(int resource, char *buffer);
  int (*write)(int resource, char *buffer);
  int (*close)(int resource);
} block_methods_table_t;

/* Definition de la table des methodes de l'interface disk */
typedef struct disk_methods_s
{
  struct block_methods_s parent;
} disk_methods_t;

/* Implentation de la table des methodes */
disk_methods_t disk_methods =
{
  .parent = {  ide_open_raw, 
               ide_read_raw, 
               ide_disk_read, 
               ide_disk_write, 
               ide_disk_close }
};

/* Implentation de l'interface disk */
interface_t disk = {
  "disk",                  /* name */
  "Disk Interface",        /* description */
  "Thomas Petazzoni",      /* authors */
  NULL,                    /* depends */
  { 0, 0, 1 },             /* version */
  NULL, NULL,              /* interface ll */
  NULL,                    /* trans ll */
  8,                       /* max instances */
  sizeof(disk_translator_t),
  sizeof(disk_resource_t),
  0,
  disk_constructor,
  disk_destructor,
  (interface_methods_table_t *) &disk_methods,
  (interface_shared_data_t *) &disk_shared_data
};

Dans cette derniere structure (l'interface disk) on voit nettement que
la table des methodes est donnee au niveau de l'interface. Donc TOUTES
les instances de l'interface disk vont DEVOIR utiliser les methodes
ide_open_raw, ide_read_raw, ide_write_raw, etc...

Pourtant on peut imaginer que l'interface disk soit utilise pour TOUS
les disques, et que parfois certaines instances utilisent les
fonctions ide_* et d'autres fois elles utilisent les fonctions scsi_*
!

Ceci necessiterait donc de deplacer la table des methodes au niveau de
l'instance (translator).

Voila pour la premiere reflexion du jour,

Thomas
-- 
PETAZZONI Thomas - thomas.petazzoni@enix.org - UIN : 34937744
(Perso)      http://www.enix.org/~thomas/
(KOS)        http://kos.enix.org/ 
(Club LinUT) http://club-linut.enix.org