Main page

The sources can be downloaded at http://www.uwesalomon.de- /code- /indigo- /indigo.tar.gz.  They include this HTML documentation, too.

If you have any questions, requests, advice, bugs or patches ─ send them to po.nosp@m.st@uwesal.nosp@m.omon.de.  I would really appreciate some feedback, especially for the Mac OS X parts of the library, as i cannot test them.

Summary
Indigo contains some standard template containers in the spirit of the Qt 4.0 container classes (http://doc.trolltech.com/4.0/containers.html).
These are the external dependencies you may have to fulfill, depending on which modules of Indigo you use:
There are some hints on which container to choose (Container types) to get most out of the possible performance.

Contents of the library

Tools

Indigo contains some standard template containers in the spirit of the Qt 4.0 container classes (http://doc.trolltech.com/4.0/containers.html).  I will try as good as i can to imitate their API and behaviour, and to make them very fast as well.  The Qt containers are STL-compatible, thus hopefully mine are too.  In the last time more and more classes from other parts of Qt made it into the library.

Currently there are 6 containers finished: Vector, List, LinkedList, Map, Hash and Set.  The String is essentially finished ─ the missing features are either too complex or make no sense to implement without a port of all localization functionality.

Core

I have written a dynamic library loader for Win32, Linux and Mac OS X >= 10.3, which is necessary for the ICU imports to work: DynamicLoader.

Indigo contains an implementation of Signals and slots with the class CmdTarget (to receive signals) and the struct Signal to send them.  They are the first classes that somehow relate to Qt counterparts, but are not designed to perfectly mimic them.  This is mostly due to the inherent differences between D and C++.

Input/output

There is a platform-independent File class built on the abstract base class IODevice, and there is already a DataStream that can store and load binary data.  All containers can serialize their contents into this stream, and it is very easy for you to make your types serializable through DataStream, too!  In the future there will be a TextStream class as well, to provide text parsing.

I18n

Currently i am working on the internationalisation modules.  I have included the UTF Conversion functions (high-performant and fully Unicode compliant), and written a full Message translation implementation, complete with two helper programs imupdate and imrelease.  There are the basic Unicode character properties in indigo.i18n.characters.  The Message formatting module is already partly working, as well as the Locale, where floating point and date formatting will be added next.  The ICU dependency will be dropped as soon as this part of the library is finished.

Xml

There is a simple port of the Expat XML parser in indigo.xml.expat.  It is for internal purposes, but if you need it desperately...

Compiling programs with Indigo

These are the external dependencies you may have to fulfill, depending on which modules of Indigo you use:

ICUhttp://icu.sourceforge.net/
Expathttp://expat.sourceforge.net/

Personally, i prefer to use the Build utility, which you can download at http://www.dsource.org/projects/build/.  Put a symbolic link to the Indigo “src” directory into your application’s source directory, rename it to “indigo”, and simply call Build with the name of your main source file.  This makes sure that only those parts of Indigo are linked in that are actually needed, for example the whole indigo.icu tree is not needed if you do not use String, and this will save you from downloading and installing the ICU library.

Other documents

There are some hints on which container to choose (Container types) to get most out of the possible performance.  To see how much is possible, i have tried to verify the Performance of the containers.

Indigo contains three different containers that implement “lists” of items: Vector, List and LinkedList.
Wraps the builtin dynamic arrays.
Provides a datastructure that is a mixture of a Vector and a LinkedList.
Wraps a generic doubly-linked list.
Implements a generic associative array.
Implements a generic associative array, based on a hash-table.
Implements a set internally based on Hash.
Implements an Unicode string.
Implements a function loader for dynamic libraries.
This module contains an implementation of signals and slots, similar to those in Qt (http://doc.trolltech.com/4.0/signalsandslots.html).
This is the base class for all classes that want to have slots, thus it is the base class of the Indigo class hierarchy (a pendant to QObject).
A generic signal.
This class provides an interface to read from and write to files.
This class provides a common interface for devices that support reading and writing of blocks of data, such as File.
This class provides serialization of binary data in a platform-independent way.
For every conversion, there are always 2 functions.
Message translation is the first step to an internationalized application.
Message formatting is necessary to create dynamic strings that are visible to the user.
This class is not yet finished.
The aim of this project is not only to write containers that are similar to the Qt containers, but also to make them fast.