*** TODO for libtagcoll

 - Impossible now to detect out-of-space errors because TagcollSerializer isn't
	checking the return code of fprintf (changing it would break libtagcoll
	binary compatibility)

 - Document header files and main classes, with usage examples rather than long
	explanations
 - Add tests

If mergeequivalent is called on a child node of a tree node, the
resulted hiearchy might come out with a single root node.  In that
case, the node previously selected is equivalent to the root.

Option 1: take the parent into account when merging
Option 2: self-expand lone child nodes


 - Implement cleanup of the tagcoll with noise filtering (removing tags with
   cardinality less than a given threshold) and merging of equivalent tags.
   Implement as a method of TagCollection, that gives the new, cleaned
   collection.

	 - Another optimization would be to remove intermediate hierarchy nodes wich
		contain a single child node and no elements.

		It could just be implemented by merging tagsets with cardinality under a
		given threshold into the nearest, bigger one.  Like filtering insignificant
		or "noise" tag data before building the structure.

		The optimization must be kept optional, because it induces a loss of tag
		informations if the resulting tagged collection is used as the only way to
		store the results like with tagbk

 - Document the tree-cleaning features:
	 - noise reduction
	 - merging of equivalent items
    - flattenThreshold

 - Implications can be seen as a simple form of derived tags: handling them in
   that way could avoid the need of multiple
   expand-implications/add-derived-tags/expand-implications cycles


 * Version 0.99.1

--- 2004-08-15
 + Tagexpr: match the wildcard asterisk '*' at the beginning or end of the tag
   name (can now do taggrep *::server && mail::*)


 * Version 0.99

--- 2004-08-01
 + Tag and Facet: allow to memorize the full range of data available

--- 2004-07-27
 + Added UnfacetedRemover from libdebtags
 
--- 2004-07-26
 + README updated!
 + Tag::operator< has lexicographical compare implemented wrong
 + FacetImpl::obtainTag is an unmodified copy of FacetImpl::getTag

--- 2004-07-24
 + [.cc files] Require includes to be included with an explicit path, as in
   #include<tagcoll/header.h>
 + Generate libtagcoll1 instead of libtagcoll0
 + Introduce doxygen in the build system
 + Fix version number in library soname

--- 2004-07-23
 + Move names in the Tagcoll namespace
 + Added the Tag, TagSet, TagConsumer, BasicTagMatcher classes from libdebtags
 + Expand templates: don't depend on the tag being a string
 + Removed template instantiations with int items, as they can now be
   instantiated by applications when they need them
 + [headers] Require includes to be included with an explicit path, as in
   #include<tagcoll/header.h>


 * Version 0.9

--- 2004-07-07
 + InputMerger template: don't depend on the tag being a string


 * Version 0.8

 + Applying to InputMerger a TagcollChange containing a non-existing item makes
	the function segfault


 * Version 0.7

--- 2004-06-29
 + Put .cc files with templates in include
 + Remove Package* instantiations
 + Move instantiations on a instantiations.cc file, to avoid being included by
	other instantiators
 + Ported to cdbs
 + InputMerger::output is now const

--- 2004-06-28
 + InputMerger: Also compute related items starting from a tagset


 * Version 0.6

--- 2004-05-20
 + Instantiated template also for Debtags::Package* item type
   (still waiting for a way to avoid having to explicitly instantiate templates
    for any possible future usage)
--- 2004-06-16
 + Implemented InputMerger::getRelatedItems
--- 2004-05-13
 + Moved TagCollection::Change to TagcollChange
 + Implemented InputMerger::applyChange


 * Version 0.5

---
 + Templatize more of the consumer/filter process
 + TagCollection: add an output(consumer) method to dump the collection to a
   consumer
 + TagCollection: add a mergeEquivalenTags method
	If a tree node has only one child non-leaf node, compress them in a single
	one merging the tree tags.
	For example: /a/b/ could become /a,b/
 + Implement CleanSmartHierarchyNode
 + Implement noise reduction (remove tags with cardinality less than a given
   threshold)

 vim:set ts=3 sw=3:
