1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-20 04:48:06 +01:00

changed iface of WMFindInBag

This commit is contained in:
kojima
2000-04-02 20:16:30 +00:00
parent fc2a87c645
commit ee21c5bea6
3 changed files with 22 additions and 9 deletions

View File

@@ -1,3 +1,11 @@
changes since wmaker 0.62.0:
............................
- added WM{S,G}etDataFormat()
- added drag and drop
- changed selection code
- added clientdata to WMFindInBag
changes since wmaker 0.61.1: changes since wmaker 0.61.1:
............................ ............................

View File

@@ -163,7 +163,7 @@ typedef struct W_BagFunctions {
void (*emptyBag)(WMBag *bag); void (*emptyBag)(WMBag *bag);
void (*freeBag)(WMBag *bag); void (*freeBag)(WMBag *bag);
void (*mapBag)(WMBag *bag, void (*function)(void*, void*), void *data); void (*mapBag)(WMBag *bag, void (*function)(void*, void*), void *data);
int (*findInBag)(WMBag *bag, int (*match)(void*)); int (*findInBag)(WMBag *bag, int (*match)(void*, void*), void *cdata);
void *(*first)(WMBag *bag, WMBagIterator *ptr); void *(*first)(WMBag *bag, WMBagIterator *ptr);
void *(*last)(WMBag *bag, WMBagIterator *ptr); void *(*last)(WMBag *bag, WMBagIterator *ptr);
void *(*next)(WMBag *bag, WMBagIterator *ptr); void *(*next)(WMBag *bag, WMBagIterator *ptr);
@@ -398,7 +398,7 @@ WMBag *WMCreateTreeBagWithDestructor(void (*destructor)(void*));
#define WMCountInBag(bag, item) bag->func.countInBag(bag, item) #define WMCountInBag(bag, item) bag->func.countInBag(bag, item)
#define WMFindInBag(bag, match) bag->func.findInBag(bag, match) #define WMFindInBag(bag, match, cdata) bag->func.findInBag(bag, match, cdata)
#define WMBagFirst(bag, ptr) bag->func.first(bag, ptr) #define WMBagFirst(bag, ptr) bag->func.first(bag, ptr)
@@ -486,6 +486,10 @@ void WMResetDataBytesInRange(WMData *aData, WMRange aRange);
void WMSetData(WMData *aData, WMData *anotherData); void WMSetData(WMData *aData, WMData *anotherData);
void WMSetDataFormat(WMData *aData, unsigned format);
unsigned WMGetDataFormat(WMData *aData);
/* Storing data */ /* Storing data */

View File

@@ -44,7 +44,7 @@ static int sortBag(WMBag *bag, int (*comparer)(const void*, const void*));
static void emptyBag(WMBag *bag); static void emptyBag(WMBag *bag);
static void freeBag(WMBag *bag); static void freeBag(WMBag *bag);
static void mapBag(WMBag *bag, void (*function)(void*, void*), void *data); static void mapBag(WMBag *bag, void (*function)(void*, void*), void *data);
static int findInBag(WMBag *bag, int (*match)(void*));; static int findInBag(WMBag *bag, int (*match)(void*,void*), void *data);
static void *first(WMBag *bag, WMBagIterator *ptr); static void *first(WMBag *bag, WMBagIterator *ptr);
static void *last(WMBag *bag, WMBagIterator *ptr); static void *last(WMBag *bag, WMBagIterator *ptr);
static void *next(WMBag *bag, WMBagIterator *ptr); static void *next(WMBag *bag, WMBagIterator *ptr);
@@ -785,28 +785,29 @@ static void mapBag(WMBag *self, void (*function)(void*, void*), void *data)
static int findInTree(W_TreeBag *tree, W_Node *node, int (*function)(void*)) static int findInTree(W_TreeBag *tree, W_Node *node,
int (*function)(void*,void*), void *cdata)
{ {
int index; int index;
if (node == tree->nil) if (node == tree->nil)
return WBNotFound; return WBNotFound;
index = findInTree(tree, node->left, function); index = findInTree(tree, node->left, function, cdata);
if (index != WBNotFound) if (index != WBNotFound)
return index; return index;
if ((*function)(node->data)) { if ((*function)(node->data, cdata)) {
return node->index; return node->index;
} }
return findInTree(tree, node->right, function); return findInTree(tree, node->right, function, cdata);
} }
static int findInBag(WMBag *self, int (*match)(void*)) static int findInBag(WMBag *self, int (*match)(void*,void*), void *cdata)
{ {
return findInTree(SELF, SELF->root, match); return findInTree(SELF, SELF->root, match, cdata);
} }