Şu yapıya baktıkça epey bir yabancılık hissettim. Bu konuda aydınlatıcı küçük notlara ihtiyacım var. Rica etsem ama kimden? Kim o, evet kim o...:)
Kısaca belki iki soru: (1) işlevin çift yıldızlı parametreleri ne oluyor? (2) (void*) ile yapılan tür dönüşüm ne demek oluyor? Bir de BONUS: (3) Bu tür gösterge(işaretçi) yapılarının D'de gösterimi/karşılığı nasıl?
static Babl *
image_new (BablFormat *format,
BablModel *model,
int components,
BablComponent **component,
BablSampling **sampling,
BablType **type,
char **data,
int *pitch,
int *stride)
{
Babl *babl;
/* allocate all memory in one chunk */
babl = babl_malloc (sizeof (BablImage) +
sizeof (BablComponent*) * (components) +
sizeof (BablSampling*) * (components) +
sizeof (BablType*) * (components) +
sizeof (void*) * (components) +
sizeof (int) * (components) +
sizeof (int) * (components));
babl_set_destructor (babl, babl_image_destruct);
babl->image.component = (void*)(((char *)babl) + sizeof (BablImage));
babl->image.sampling = (void*)(((char *)babl->image.component) + sizeof (BablComponent*) * (components));
babl->image.type = (void*)(((char *)babl->image.sampling) + sizeof (BablSampling*) * (components));
babl->image.data = (void*)(((char *)babl->image.type) + sizeof (BablType*) * (components));
babl->image.pitch = (void*)(((char *)babl->image.data) + sizeof (void*) * (components));
babl->image.stride = (void*)(((char *)babl->image.pitch) + sizeof (int) * (components));
babl->class_type = BABL_IMAGE;
babl->instance.id = 0;
babl->instance.name = "slaritbartfast";
babl->image.format = format;
babl->image.model = model;
babl->image.components = components;
memcpy (babl->image.component, component, components * sizeof (void *));
memcpy (babl->image.type, type, components * sizeof (void *));
memcpy (babl->image.data, data, components * sizeof (void *));
memcpy (babl->image.pitch, pitch, components * sizeof (int));
memcpy (babl->image.stride, stride, components * sizeof (int));
return babl;
}
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]