mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 20:38:08 +01:00
changed iface of WMFindInBag
This commit is contained in:
@@ -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:
|
||||
............................
|
||||
|
||||
|
||||
@@ -163,7 +163,7 @@ typedef struct W_BagFunctions {
|
||||
void (*emptyBag)(WMBag *bag);
|
||||
void (*freeBag)(WMBag *bag);
|
||||
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 *(*last)(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 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)
|
||||
|
||||
@@ -486,6 +486,10 @@ void WMResetDataBytesInRange(WMData *aData, WMRange aRange);
|
||||
|
||||
void WMSetData(WMData *aData, WMData *anotherData);
|
||||
|
||||
|
||||
void WMSetDataFormat(WMData *aData, unsigned format);
|
||||
|
||||
unsigned WMGetDataFormat(WMData *aData);
|
||||
/* Storing data */
|
||||
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ static int sortBag(WMBag *bag, int (*comparer)(const void*, const void*));
|
||||
static void emptyBag(WMBag *bag);
|
||||
static void freeBag(WMBag *bag);
|
||||
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 *last(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;
|
||||
|
||||
if (node == tree->nil)
|
||||
return WBNotFound;
|
||||
|
||||
index = findInTree(tree, node->left, function);
|
||||
index = findInTree(tree, node->left, function, cdata);
|
||||
if (index != WBNotFound)
|
||||
return index;
|
||||
|
||||
if ((*function)(node->data)) {
|
||||
if ((*function)(node->data, cdata)) {
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user