source: tags/ms_r18q1/WINDOW/aw_nawar.hxx

Last change on this file was 16763, checked in by westram, 6 years ago
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.8 KB
Line 
1// =============================================================== //
2//                                                                 //
3//   File      : aw_nawar.hxx                                      //
4//   Purpose   :                                                   //
5//                                                                 //
6//   Institute of Microbiology (Technical University Munich)       //
7//   http://www.arb-home.de/                                       //
8//                                                                 //
9// =============================================================== //
10
11#ifndef AW_NAWAR_HXX
12#define AW_NAWAR_HXX
13
14#ifndef CB_H
15#include <cb.h>
16#endif
17#ifndef _GLIBCXX_CSTDDEF
18#include <cstddef>
19#endif
20#ifndef ARBTOOLS_H
21#include <arbtools.h>
22#endif
23#ifndef ARB_MSG_H
24#include <arb_msg.h>
25#endif
26
27class AW_root_cblist : virtual Noncopyable {
28    RootCallback    callback;
29    AW_root_cblist *next;
30
31    AW_root_cblist(AW_root_cblist *next_, const RootCallback& cb) : callback(cb), next(next_) {}
32    ~AW_root_cblist() { delete next; }
33
34    AW_root_cblist *unlink(const RootCallback& cb, AW_root_cblist*& found) {
35        if (callback == cb) {
36            AW_root_cblist *rest = next;
37           
38            found = this;
39            next  = NULp;
40
41            return rest;
42        }
43
44        if (next) next = next->unlink(cb, found);
45        return this;
46    }
47
48    void call(AW_root *root) {          // runs the whole list in FIFO order
49        if (next) next->call(root);
50
51        arb_assert(!GB_have_error());
52        callback(root);
53        arb_assert(!GB_have_error());
54    }
55
56public:
57
58    static void add(AW_root_cblist*& listhead, const RootCallback& cb) {
59        remove(listhead, cb); // first remove duplicated callbacks
60        listhead = new AW_root_cblist(listhead, cb);
61    }
62    static void remove(AW_root_cblist*& listhead, const RootCallback& cb) {
63        AW_root_cblist *found = NULp;
64        if (listhead) listhead = listhead->unlink(cb, found);
65        delete found;
66    }
67    static void clear(AW_root_cblist*& listhead) {
68        if (listhead) {
69            delete listhead;
70            listhead = NULp;
71        }
72    }
73    static void call(AW_root_cblist*& listhead, AW_root *root) {
74        if (listhead) listhead->call(root);
75    }
76
77    bool contains(const RootCallback& cb) const {
78        return (cb == callback) || (next && next->contains(cb));
79    }
80    static bool contains(const AW_root_cblist*& listhead, const RootCallback& cb) {
81        return listhead && listhead->contains(cb);
82    }
83};
84
85struct AW_var_target {
86    AW_var_target(void *pntr, AW_var_target *next);
87
88    void          *pointer;
89    AW_var_target *next;
90};
91
92void aw_update_all_window_geometry_awars(AW_root *awr);
93void AW_forget_all_window_geometry(AW_window *aww);
94
95#else
96#error aw_nawar.hxx included twice
97#endif // AW_NAWAR_HXX
98
Note: See TracBrowser for help on using the repository browser.