import std.stdio;
/*
** ssort.d (C) Helmut Leitner 2003
** struct sort example
** public domain
*/
struct As // a struct
{
int x;
string name;
int cmp(As *p2)
{
int a = x;
int b = p2.x;
printf("compare %d %d\n",a,b);
return a < b ? -1 : a > b ? 1 : 0;
}
}
class TypeInfo_S8ssort_As : TypeInfo
{
int tsize()
{
return As.sizeof;
}
int compare_name(void *p1, void *p2)
{
auto a = (cast(As *) p1).name;
auto b = (cast(As *) p2).name;
// printf("compare %.*s %.*s\n",a,b);
return a < b ? -1 : a > b ? 1 : 0;
}
int compare_x(void *p1, void *p2)
{
int a = (cast(As *) p1).x;
int b = (cast(As *) p2).x;
// printf("compare %d %d\n",a,b);
return a < b ? -1 : a > b ? 1 : 0;
}
int compare(void *p1, void *p2)
{
return compare_name(p1,p2);
}
}
void AsPrint(As a) {
printf("x=%d name=%.*s\n",a.x,a.name);
}
As sasar[3]= [ // static As array
{ 2, "Gamma" },
{ 1, "Beta" },
{ 3, "Alpha" }
];
void AsArrayPrintTitle(As [] array, string title)
{
if(title.length) {
printf("%.*s",title);
}
for(int i=0; i<array.length; i++)
{
AsPrint(array[i]);
}
}
int main()
{
AsArrayPrintTitle(sasar,"\nbefore sorting:\n");
sasar.sort;
AsArrayPrintTitle(sasar,"\nafter sorting:\n");
return (0);
} |