#ifndef __GALLERY_H__ #define __GALLERY_H__ struct gallery; /* Constructor: allocates memory and returns a pointer to a new gallery. */ struct gallery *gallery_new(); /* Destructor: frees all the memory allocated to the gallery. */ void gallery_destroy(struct gallery *g); /* Adds a PNG by filename to the gallery. If the filename is already in the * gallery, returns -1; if the file does not exist, or if it is not a valid PNG * format, returns -2; otherwise, returns 1 on success. */ int gallery_add(struct gallery *g, char *filename); /* Removes a photo from the gallery. Returns 1 on successful removal, otherwise * 0 if the photo is not in the gallery. */ int gallery_rm(struct gallery *g, char *filename); /* Returns the number of photos in the gallery. */ int gallery_count(struct gallery *g); /* Removes photos from the gallery that do not match a predicate function. The * predicate is passed the filename, width and height of each photo. The * predicate should return 1 to keep the photo, and 0 to remove the photo. The * function returns the number of photos present after filtering. */ int gallery_filter(struct gallery *g, int (*f)(char *filename, int width, int height)); /* Returns the filename of the photo that is the best fit for the dimensions * width*height. If there are multiple best fits, any may be returned. If there * are no photos that fit, returns NULL. */ char *gallery_bestfit(struct gallery *g, int max_width, int max_height); #endif // __GALLERY_H__