README.TXT for YACL This is YACL (Yet Another Class Library). It is a general-purpose programming library designed with the idea of identifying and implementing useful object abstractions that frequently occur in application development, so that development effort can be cut down significantly. The abstractions are designed to be application-domain-specific rather than platform-specific. This makes it possible for YACL to be ported to multiple platforms with little effort, and any application that is coded to use YACL's classes will be runnable on any of the supported platforms with merely a recompilation. YACL is part of an ongoing project to create a completely portable program development environment. YACL consists of three kinds of classes: base classes (consisting of primitive data types and container classes), i/o classes (for data storage and retrieval) and GUI classes using a variation of the Model-View-Controller paradigm. The base and i/o classes of YACL have been designed to support the most efficient algorithms possible, and to impose as few storage constraints as possible. All classes (base, i/o and GUI) have been tested for memory and resource leaks. CONCEPTUAL FEATURES: - Template-based containers for code sharing - Easy inter-object communication via notification (used extensively in the GUI framework -- see below) - Support for storage and retrieval of objects in binary form - Support for very large sequences, sets and maps (with up to about 64 million entries), even under MS-Windows, thus circumventing the 64K segment size limitation FUNCTIONAL FEATURES: Base library: - primitive data types: string, date, time-of-day, byte array, byte string - container classes (template-based): sequence (in lieu of lists), set, bitset, map, tree; as noted above, the sequence, set and map can have size up to 2^26 (about 64 million), even under MS-Windows. - utility classes: string splitter, tree walker - memory leak checker class and support functionality for checking for leaks and memory corruption errors File i/o library: - SlottedFile for managing files with fixed-length records (well suited for tables in relational databases); manages upto 800 million records with at most five i/o operations per record - ByteStringStore for managing files with variable-length records (whose lengths can even grow and shrink dynamically) -- suited, for example, for maintaining secondary indices or other "binary large object" data B-trees: - In-memory and disk-based B-trees supported, both sharing the same B-tree algorithm code - Can be used in conjunction with the above file i/o library for B-trees with variable-length keys GUI library: - Portable abstractions for building graphic user interfaces, based on the model-view-controller paradigm - GUI objects well integrated with base library, to enhance the overall power and reusability of classes - Supports menus, dialogs, buttons, listboxes, button groups, cursors, fonts, pens, colors and elementary drawing - Provides for easy composition of basic objects, as well as high reusability SUPPORTED PLATFORMS: Here is a summary of current status in tabular form: MS/Windows OS/2 Unix (Linux and Ultrix) Borland C++ 3.1 Borland C++ 1.0 GNU C++ 2.6.0 Base classes X X X I/O classes X X X GUI classes X X (partial) All of YACL's classes have been tested under Microsoft Windows using Borland C++ 3.1. The base classes have also been tested with Borland C++ for OS/2 and with GNU C++ 2.6.0 under Linux. (The base classes will not compile under earlier versions of GNU C++ due to bugs in the compiler.) The base classes do not (yet) compile under Watcom C++; a workaround for a compiler bug is being investigated. The implementations of the GUI classes under X/Motif is not yet complete; it lacks support for graphics, fonts and bitmaps. But it does include all the basic GUI widget functionality, and sample programs are included to demonstrate this fact. If you want to try out the X/Motif version, build the programs in the uidemo directory that include makefile.gcc. (Those programs that are as yet unimplemented under X/Motif do not include this makefile.) YACL cannot be compiled with any compiler that does not support templates. DOCUMENTATION: A tutorial and reference manual for YACL will appear as a book published by Addison-Wesley in the summer of 1995. If you are interested in looking at sample chapters from a preliminary draft of the book, please obtain sample chapters by anonymous ftp from the host aw.com, in the directory pub/aw.computer.science/YACL. All comments, criticisms and reports of bugs or other errors will be gratefully accepted by the author at the address below. FUTURE WORK: The GUI objects are being ported to the X/Motif environment; this port is almost complete, and a version will be available within a month. At a later date, YACL will be available under OS/2 PM and (maybe possibly) the Apple Mac. RELATED PROJECTS: A GUI layout designer (with functionality similar to Borland's Resource Workshop) is currently under development. An awk script is available for translating MS-Windows resource files into a form usable by YACL. Direct support for dialogs loaded from Windows resource files is also available; this is, however, a non-portable feature. AUTHOR: M. A. Sridhar Department of Computer Science University of South Carolina Columbia, SC 29208 USA e-mail: sridhar@usceast.cs.scarolina.edu Phone: (803) 777-2427 Fax: (803) 777-3767 N. Bhowmik, currently with Object Design Inc., coded the initial version of the GUI classes of YACL. COPYRIGHT: This software is Copyright (C) M. A. Sridhar, 1994. You are free to copy, modify and distribute this software as you see fit, and to use it for any purpose, provided this copyright notice and the following disclaimer are included without modification in all copies and modifications. DISCLAIMER: The author makes no warranties, either expressed or implied, with respect to this software, its quality, performance, merchantability, or fitness for any particular purpose. This software is distributed AS IS. The user of this software assumes all risks as to its quality and performance. In no event shall the author be liable for any direct, indirect or consequential damages, even if the author has been advised as to the possibility of such damages. AVAILABILITY: YACL is available for anonymous ftp from ftp.cs.scarolina.edu (129.252.131.11), as the file /pub/sridhar/yacl.zip. Please send your comments, suggestions and bug reports to the author at the above address.