Aliohjelmien väliseen tiedonvälitykseen tehdään tietue, johon kasataan kaikki yhteisesti tarvittavat muuttujat. Ongelmassamme niitä on kentan_nro ja osoitin käyttämämme kerhon jasenet - taulukon alkuun. Siis ne tietueeseen. Seuraavasta esimerkistä puuttuvat saantimetodit, joten se on vain hahmotelma:
typedef struct { /* Lajittelussa apuna käytettävä tietue. */
int kentan_nro; /* Kenttä jonka mukaan lajitellaan. */
cKerho *kerho; /* Lajiteltava kerho */
} tVertaa; /* */
static tVertaa VERTAA; /* Tiedonvälitys lajittele - > vertaile */
int vertaile(const void *a, const void *b)
{
string s1,s2;
s1 = VERTAA.kerho->anna(*(int *)a).kentta_jonoksi(VERTAA.kentan_nro,);
s2 = VERTAA.kerho->anna(*(int *)b).kentta_jonoksi(VERTAA.kentan_nro,);
return (strcmp(s1.c_str(),s2.c_str());
}
void cKerho::lajittele(cJarjestys *jarj,int kentan_nro)
{
int j,ind,max_ind;
if ( (kentan_nro < 0) || !jarj- >jarjesta ) return;
if ( jarj- >Indekseja() == 0 ) { /* Alustetaan perm. taulukko */
for (j=0; j<jasenia; j++)
jarj- >lisaa(j);
}
VERTAA.kentan_nro = kentan_nro;
VERTAA.kerho = this;
qsort( (void *)(jarj- >Indeksit()), /* Lajiteltava taulukko */
jarj- >Indekseja(), /* Taulukon alkioiden lukumäärä */
sizeof(jarj- >anna(0)), /* Yksittäisen alkion koko */
vertaile); /* Vertailualiohjelman nimi */
}lajittele - aliohjelma tekee tarvittavat alustukset, mm. laittaa permutaatiotaulukon johonkin järjestykseen (tässä tapauksessa ehdollisesti, eli jos taulukolla jo on järjestys, ei sitä sotketa), laittaa arvot yhteisille muuttujille ja kutsuu qsort - aliohjelmaa tarvittavilla parametreilla.
int vertaile(const void *a, const void *b)
{
string s1,s2;
s1 = VERTAA.kerho->anna(*(int *)a).kentta_jonoksi(VERTAA.kentan_nro,);
s2 = VERTAA.kerho->anna(*(int *)b).kentta_jonoksi(VERTAA.kentan_nro,);
jono_isoksi(s1); jono_isoksi(s2);
return (strcmp(s1.c_str(),s2.c_str());
}