#include "txioctrl.h" #ifdef MaxImageGroups #include "list_tem.hpp" struct ImageNumber { int group; int offset; ImageNumber(){} ImageNumber(int g,int o) : group(g), offset(o) {} inline int operator == (ImageNumber const & in2) const { return group==in2.group && offset==in2.offset; } inline int operator != (ImageNumber const & in2) const { return ! operator == (in2); } }; static List imgs_used_by_group[MaxImageGroups]; static List * grps_used_by_image[MaxImageGroups][MaxImages]; void MarkImageInUseByGroup(int img_group, int img_num_offset, int group_using) { if (imgs_used_by_group[group_using].contains(ImageNumber(img_group,img_num_offset))) return; imgs_used_by_group[group_using].add_entry(ImageNumber(img_group,img_num_offset)); List * & grps_used_by_imageR = grps_used_by_image[img_group][img_num_offset]; if (!grps_used_by_imageR) grps_used_by_imageR = new List(img_group); // includes itself if (!grps_used_by_imageR->contains(group_using)) grps_used_by_imageR->add_entry(group_using); } int IsImageInUse(int img_group, int img_num_offset) { if (grps_used_by_image[img_group][img_num_offset]) return 1; else return 0; } int CanDeleteImage(int img_group, int img_num_offset) { if (grps_used_by_image[img_group][img_num_offset]) { if (grps_used_by_image[img_group][img_num_offset]->contains(img_group)) { grps_used_by_image[img_group][img_num_offset]->delete_entry(img_group); // remove itself if (!grps_used_by_image[img_group][img_num_offset]->size()) { delete grps_used_by_image[img_group][img_num_offset]; grps_used_by_image[img_group][img_num_offset] = 0; return 1; } else return 0; } else return 0; } else return 1; } void ImageGroupFreed(int img_group) { while (imgs_used_by_group[img_group].size()) { ImageNumber used = imgs_used_by_group[img_group].first_entry(); List * & grps_used_by_imageR = grps_used_by_image[used.group][used.offset]; grps_used_by_imageR->delete_entry(img_group); if (!grps_used_by_imageR->size()) { NowDeleteImage(used.group,used.offset); delete grps_used_by_imageR; grps_used_by_imageR = 0; } imgs_used_by_group[img_group].delete_first_entry(); } } void EnumSharedImages(int group_num, int numimages, ImageNumberCallbackFunction callback_fn, void * user) { for (int i=0; i