Fixed crash in heavily loaded multi-threaded systems using simultaneous sorted
[pwlib.git] / pwlib.dxx
blob2869f3e451cde30d0bd357042e42feb76213aa1b
1 /**@name Portable Windows Libaray
3         A multi-platform operating system and GUI abstraction system for
4         application development.
6 @memo   A Portable Text and GUI C/C++ Class Libarary.
7 @version        1.2.0
8 @author Equivalence Pty. Ltd.
9 */
11 //@{
13 /**@name Introduction
14 \begin{center}
15         {\Large{\bf Welcome to the wonderful world of PWLib}}
16 \end{center}
18 PWLib is a moderately large class library that has its genesis many years ago as
19 a method to product applications to run on both Microsoft Windows and Unix
20 X-Windows systems. It also was to have a Macintosh port as well but this never
21 eventuated.
23 Since then the system has grown to having quite good application to areas other
24 than mere Windows GUI portability. Classes for I/O portability, multi-threading
25 portability, aid in producing unix daemons and NT services portably and all
26 sorts of internet protocols were added over the years.
28 All this over and above basic "container" classes such as arrays, linear lists,
29 sorted lists (RB Tree) and dictionaries (hash tables) which were all created
30 before STL became the answer to all our prayers. Unfortunately, due to intertia
31 and the GNU C++ inadequate support of templates, this library will probably not
32 be ported to STL in the near future.
34 The library was used extensively for all our in-house products. Then we decided
35 to support the open H323 project by throwing in some of the code written for
36 one of our products. Thus, required PWLib so it got thrown into the open source
37 world as well.
39  \begin{center}
40         {\Large{\bf Enjoy!}}
41  \end{center}
44 /**@name        Using PWLib
45 Detailed tutorials will almost certainly not be forthcoming. However,
46 at least giving you an indication on how to start an application would
47 be usefull, so here is the infamous "Hello world!" program.
48 \begin{verbatim}
49 // hello.cxx
51 #include <ptlib.h>
53 class Hello : public PProcess
55   PCLASSINFO(Hello, PProcess)
56   public:
57         void Main();
60 PCREATE_PROCESS(Hello)
62 void Hello::Main()
64   cout << "Hello world!\n";
67 // End of hello.cxx
68 \end{verbatim}
70 The \Ref{CREATE_PROCESS} macro actually defines the #main()# function
71 and creates an instance of Hello. This assures that everything is
72 initialised in the correct order. C++ does initialisation of global
73 statics badly (and destruction is even worse), so try to put
74 everything into your PProcess descedent rather than globals.
76 A GUI application is very similar but is descended off
77 \Ref{PApplication} rather than \Ref{PProcess}, and would create a
78 window as a descendent off the \Ref{PMainWindow} class.
80 @memo   Brief examples.
83 /**@name        Console Mode Classes
84                 This as far as possible "normalises" different operating systems to
85                 a single API so the same application can be compiled without modification.
86    @memo        Classes that embody operating system abstractions.
87   */
88     //@{
89         /**@name Base Object Class
90            @memo The base class for all other clasess in the system, plus some
91                  additional low level support classes/functions eg memory management.
92           */
93             //@{
94                 //@Include: include/ptlib/object.h
95             //@}
96         /**@name Container Classes
97            @memo Classes that contain other objects.
98           */
99             //@{
100                 //@Include: include/ptlib/contain.h
101                 //@Include: include/ptlib/array.h
102                 //@Include: include/ptlib/lists.h
103                 //@Include: include/ptlib/dict.h
104                 //@Include: include/ptlib/pstring.h
105             //@}
106         /**@name I/O Channel Classes
107            @memo Classes that perform general I/O
108           */
109             //@{
110                 //@Include: include/ptlib/channel.h
111                 //@Include: include/ptlib/indchan.h
112                 //@Include: include/ptlib/conchan.h
113                 //@Include: include/ptlib/pipechan.h
114                 //@Include: include/ptlib/serchan.h
115                 //@Include: include/ptlib/file.h
116                 //@Include: include/ptlib/textfile.h
117                 //@Include: include/ptlib/sfile.h
118                 //@Include: include/ptlib/filepath.h
119                 //@Include: include/ptlib/pdirect.h
120                 //@Include: include/ptlib/vfakeio.h
121                 //@Include: include/ptlib/vconvert.h
122             //@}
123         /**@name Socket Classes
124            @memo Classes that perform Berkely Sockets I/O
125           */
126             //@{
127                 //@Include: include/ptlib/socket.h
128                 //@Include: include/ptlib/ipsock.h
129                 //@Include: include/ptlib/ipdsock.h
130                 //@Include: include/ptlib/udpsock.h
131                 //@Include: include/ptlib/tcpsock.h
132                 //@Include: include/ptlib/icmpsock.h
133                 //@Include: include/ptlib/ipxsock.h
134                 //@Include: include/ptlib/spxsock.h
135                 //@Include: include/ptlib/ethsock.h
136             //@}
137         /**@name Process and Thread Classes
138            @memo Classes that handle processes, multi-threading and synchronsiation.
139           */
140             //@{
141                 //@Include: include/ptlib/pprocess.h
142                 //@Include: include/ptlib/svcproc.h
143                 //@Include: include/ptlib/thread.h
144                 //@Include: include/ptlib/semaphor.h
145                 //@Include: include/ptlib/mutex.h
146                 //@Include: include/ptlib/syncpoint.h
147                 //@Include: include/ptlib/syncthrd.h
148             //@}
149         /**@name Miscellaneous Classes
150           */
151             //@{
152                 //@Include: include/ptlib/args.h
153                 //@Include: include/ptlib/config.h
154                 //@Include: include/ptlib/ptime.h
155                 //@Include: include/ptlib/timeint.h
156                 //@Include: include/ptlib/timer.h
157                 //@Include: include/ptlib/dynalink.h
158                 //@Include: include/ptlib/sound.h
159                 //@Include: include/ptlib/video.h
160                 //@Include: include/ptlib/videoio.h
161                 //@Include: include/ptlib/remconn.h
162                 //@Include: include/ptlib/mail.h
163             //@}
164     //@}
166 /**@name        Console Mode Components
168                 These classes provide a large amount of higher level functionality
169                 that is built on the basic Console Classes which provides the
170                 Operating System abstractions.
172    @memo        Non-operating system specific classes that may be used as
173                 components in applications.
174   */
175     //@{
176         /**@name Internet Protocol Classes
177           */
178             //@{
179                 //@Include: include/ptclib/inetprot.h
180                 //@Include: include/ptclib/inetmail.h
181                 //@Include: include/ptclib/mime.h
182                 //@Include: include/ptclib/ftp.h
183                 //@Include: include/ptclib/telnet.h
184                 //@Include: include/ptclib/socks.h
185             //@}
186         /**@name HTTP Classes
187           */
188             //@{
189                 //@Include: include/ptclib/http.h
190                 //@Include: include/ptclib/url.h
191                 //@Include: include/ptclib/html.h
192                 //@Include: include/ptclib/httpform.h
193                 //@Include: include/ptclib/httpsvc.h
194             //@}
195         /**@name ASN.1 Support Classes
196           */
197             //@{
198                 //@Include: include/ptclib/asner.h
199             //@}
200         /**@name Miscellaneous Classes
201           */
202             //@{
203                 //@Include: include/ptclib/modem.h
204                 //@Include: include/ptclib/ipacl.h
205                 //@Include: include/ptclib/random.h
206                 //@Include: include/ptclib/cypher.h
207                 //@Include: include/ptclib/pssl.h
208                 //@Include: include/ptclib/pwavfile.h
209                 //@Include: include/ptclib/dtmf.h
210             //@}
211     //@}
213 /**@name        GUI Mode Classes
215                 These classes abstract Graphics User Interface elements for use
216                 by multiple platforms. Each element is implemented in the native
217                 manner for that platform eg X Windows/Motif.
219    @memo        Classes that embody windowing system abstractions.
220   */
221     //@{
222         /**@name Interactor Classes
223           */
224             //@{
225                 //@Include: include/pwlib/interact.h
226                 //@Include: include/pwlib/ilayout.h
227                 //@Include: include/pwlib/titlewnd.h
228                 //@Include: include/pwlib/toplwnd.h
229                 //@Include: include/pwlib/mdidoc.h
230                 //@Include: include/pwlib/mdiframe.h
231                 //@Include: include/pwlib/scrollab.h
232                 //@Include: include/pwlib/popup.h
233                 //@Include: include/pwlib/balloon.h
234             //@}
235         /**@name Menu Classes
236           */
237             //@{
238                 //@Include: include/pwlib/menuent.h
239                 //@Include: include/pwlib/rootmenu.h
240                 //@Include: include/pwlib/submenu.h
241                 //@Include: include/pwlib/menuitem.h
242                 //@Include: include/pwlib/menusep.h
243             //@}
244         /**@name Control Classes
245           */
246             //@{
247                 //@Include: include/pwlib/control.h
248                 //@Include: include/pwlib/ncontrol.h
249                 //@Include: include/pwlib/pbutton.h
250                 //@Include: include/pwlib/tbutton.h
251                 //@Include: include/pwlib/ibutton.h
252                 //@Include: include/pwlib/rbutton.h
253                 //@Include: include/pwlib/checkbox.h
254                 //@Include: include/pwlib/check3.h
255                 //@Include: include/pwlib/choicbox.h
256                 //@Include: include/pwlib/combobox.h
257                 //@Include: include/pwlib/listbox.h
258                 //@Include: include/pwlib/clistbox.h
259                 //@Include: include/pwlib/slistbox.h
260                 //@Include: include/pwlib/listview.h
261                 //@Include: include/pwlib/editbox.h
262                 //@Include: include/pwlib/meditbox.h
263                 //@Include: include/pwlib/pwedbox.h
264                 //@Include: include/pwlib/numedbox.h
265                 //@Include: include/pwlib/intedit.h
266                 //@Include: include/pwlib/realedit.h
267                 //@Include: include/pwlib/scrollb.h
268                 //@Include: include/pwlib/hscrollb.h
269                 //@Include: include/pwlib/vscrollb.h
270                 //@Include: include/pwlib/stattext.h
271                 //@Include: include/pwlib/staticon.h
272                 //@Include: include/pwlib/statrect.h
273                 //@Include: include/pwlib/statbox.h
274             //@}
275         /**@name Dialog Classes
276           */
277             //@{
278                 //@Include: include/pwlib/dialog.h
279                 //@Include: include/pwlib/modaldlg.h
280                 //@Include: include/pwlib/floatdlg.h
281                 //@Include: include/pwlib/simpdlg.h
282                 //@Include: include/pwlib/opendlg.h
283                 //@Include: include/pwlib/filedlg.h
284                 //@Include: include/pwlib/savedlg.h
285                 //@Include: include/pwlib/dirdlg.h
286                 //@Include: include/pwlib/fontdlg.h
287                 //@Include: include/pwlib/pclrdlg.h
288                 //@Include: include/pwlib/printdlg.h
289                 //@Include: include/pwlib/prjobdlg.h
290                 //@Include: include/pwlib/prsetdlg.h
291             //@}
292         /**@name Graphics Classes
293           */
294             //@{
295                 //@Include: include/pwlib/point.h
296                 //@Include: include/pwlib/dim.h
297                 //@Include: include/pwlib/rect.h
298                 //@Include: include/pwlib/region.h
299                 //@Include: include/pwlib/colour.h
300                 //@Include: include/pwlib/rcolour.h
301                 //@Include: include/pwlib/font.h
302                 //@Include: include/pwlib/rfont.h
303                 //@Include: include/pwlib/fontfam.h
304                 //@Include: include/pwlib/palette.h
305                 //@Include: include/pwlib/pattern.h
306                 //@Include: include/pwlib/canstate.h
307                 //@Include: include/pwlib/canvas.h
308                 //@Include: include/pwlib/icanvas.h
309                 //@Include: include/pwlib/dcanvas.h
310                 //@Include: include/pwlib/rcanvas.h
311                 //@Include: include/pwlib/mcanvas.h
312                 //@Include: include/pwlib/pcanvas.h
313                 //@Include: include/pwlib/image.h
314                 //@Include: include/pwlib/pict.h
315                 //@Include: include/pwlib/pixels.h
316                 //@Include: include/pwlib/pixels1.h
317                 //@Include: include/pwlib/pixels2.h
318                 //@Include: include/pwlib/pixels24.h
319                 //@Include: include/pwlib/pixels32.h
320                 //@Include: include/pwlib/pixels4.h
321                 //@Include: include/pwlib/pixels8.h
322             //@}
323         /**@name Miscellaneous Classes
324           */
325             //@{
326                 //@Include: include/pwlib/applicat.h
327                 //@Include: include/pwlib/stdresid.h
328                 //@Include: include/pwlib/resdata.h
329                 //@Include: include/pwlib/rstring.h
330                 //@Include: include/pwlib/caret.h
331                 //@Include: include/pwlib/cursor.h
332                 //@Include: include/pwlib/icon.h
333                 //@Include: include/pwlib/imgicon.h
334                 //@Include: include/pwlib/clipbrd.h
335                 //@Include: include/pwlib/keycode.h
336                 //@Include: include/pwlib/prinfo.h
337                 //@Include: include/pwlib/commands.h
338                 //@Include: include/pwlib/mailgui.h
339             //@}
340     //@}
342  /**@name       GUI Mode Components
344                 These classes provide a large amount of higher level functionality
345                 that is built on the basic GUI Classes which provides the
346                 GUI system abstractions.
348     @memo       Non-windowing system specific classes that may be used as
349                 components in applications.
350   */
351     //@{
352         /**@name Tool and Status Bars
353           */
354             //@{
355                 //@Include: include/pwclib/toolbars.h
356             //@}
357         /**@name Window Splitter Controls
358           */
359             //@{
360                 //@Include: include/pwclib/splitter.h
361             //@}
362         /**@name Wizard Dialog
363           */
364             //@{
365                 //@Include: include/pwclib/wizard.h
366             //@}
367         /**@name ANSI Terminal Control
368           */
369             //@{
370                 //@Include: include/pwclib/ansiterm.h
371             //@}
372         /**@name Geometric Shapes 
373           */
374             //@{
375                 //@Include: include/pwclib/shapes.h
376             //@}
377         /**@name Miscellaneous Classes
378           */
379             //@{
380                 //@Include: include/pwclib/progress.h
381             //@}
382     //@}
384 //@}