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:
@@ -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:
|
||||||
............................
|
............................
|
||||||
|
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user