Mercurial > hg > xemacs-beta
annotate lwlib/lwlib-internal.h @ 5067:7d7ae8db0341
add functions `stable-union' and `stable-intersection' to do stable set operations
-------------------- ChangeLog entries follow: --------------------
lisp/ChangeLog addition:
2010-02-22 Ben Wing <ben@xemacs.org>
* cl-seq.el:
* cl-seq.el (stable-union): New.
* cl-seq.el (stable-intersection): New.
New functions to do stable set operations, i.e. preserve the order
of the elements in the argument lists, and prefer LIST1 over LIST2
when ordering the combined result. The result looks as much like
LIST1 as possible, followed (in the case of `stable-union') by
any necessary elements from LIST2, in order. This is contrary to
`union' and `intersection', which are not required to be order-
preserving and are not -- they prefer LIST2 and output results in
backwards order.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Mon, 22 Feb 2010 21:23:02 -0600 |
parents | 03ab78e48ef6 |
children | ba07c880114a |
rev | line source |
---|---|
4894
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
1 /* Implementation-specific definitions for the Lucid Widget Library. |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
2 Copyright (C) 1992 Lucid, Inc. |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
3 Copyright (C) 2000 Ben Wing. |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
4 |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
5 This file is part of the Lucid Widget Library. |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
6 |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
7 The Lucid Widget Library is free software; you can redistribute it and/or |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
8 modify it under the terms of the GNU General Public License as published by |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
9 the Free Software Foundation; either version 1, or (at your option) |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
10 any later version. |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
11 |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
12 The Lucid Widget Library is distributed in the hope that it will be useful, |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
15 GNU General Public License for more details. |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
16 |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
18 along with XEmacs; see the file COPYING. If not, write to |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
19 the Free Software Foundation, Inc., 51 Franklin St - Fifth Floor, |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
20 Boston, MA 02110-1301, USA. */ |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
3025
diff
changeset
|
21 |
440 | 22 #ifndef INCLUDED_lwlib_internal_h_ |
23 #define INCLUDED_lwlib_internal_h_ | |
428 | 24 |
25 #include "lwlib.h" | |
26 | |
448 | 27 #ifdef USE_ASSERTIONS |
28 /* Highly dubious kludge */ | |
29 /* (thanks, Jamie, I feel better now -- ben) */ | |
1650 | 30 EXTERN_C void assert_failed (const char *, int, const char *); |
448 | 31 # define abort() (assert_failed (__FILE__, __LINE__, "abort()")) |
3025 | 32 # define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x)) |
448 | 33 #else |
34 # ifdef DEBUG_XEMACS | |
3025 | 35 # define assert(x) ((x) ? (void) 0 : (void) abort ()) |
448 | 36 # else |
3025 | 37 # define assert(x) ((void) 0) |
448 | 38 # endif |
39 #endif | |
40 | |
428 | 41 /* This represents a single widget within a widget tree. All the |
42 widgets in a widget tree are chained through the `next' field. | |
43 `info' is a back pointer to the widget tree. */ | |
44 | |
45 typedef struct _widget_instance | |
46 { | |
47 Widget widget; | |
48 Widget parent; | |
49 Boolean pop_up_p; | |
50 struct _widget_info* info; | |
51 struct _widget_instance* next; | |
52 } widget_instance; | |
53 | |
54 /* This represents a single widget tree, such as a single menubar. | |
55 The global variable `all_widget_info' lists all widget trees, | |
56 chained through the `next' field of this structure. */ | |
57 | |
58 typedef struct _widget_info | |
59 { | |
60 char* type; | |
61 char* name; | |
62 LWLIB_ID id; | |
63 widget_value* val; | |
64 Boolean busy; | |
65 lw_callback pre_activate_cb; | |
66 lw_callback selection_cb; | |
67 lw_callback post_activate_cb; | |
68 struct _widget_instance* instances; | |
69 struct _widget_info* next; | |
70 } widget_info; | |
71 | |
72 typedef Widget | |
73 (*widget_creation_function) (widget_instance* instance); | |
74 | |
75 typedef struct _widget_creation_entry | |
76 { | |
442 | 77 const char* type; |
428 | 78 widget_creation_function function; |
79 } widget_creation_entry; | |
80 | |
81 /* update all other instances of a widget. Can be used in a callback when | |
442 | 82 a widget has been used by the user */ |
428 | 83 void |
84 lw_internal_update_other_instances (Widget widget, XtPointer closure, | |
85 XtPointer call_data); | |
86 | |
87 /* get the widget_value for a widget in a given instance */ | |
88 widget_value* | |
89 lw_get_widget_value_for_widget (widget_instance* instance, Widget w); | |
90 | |
91 widget_info *lw_get_widget_info (LWLIB_ID id); | |
92 | |
440 | 93 #endif /* INCLUDED_lwlib_internal_h_ */ |