Index: tol_pkg/HashMap/HashMap.tol
===================================================================
--- tol_pkg/HashMap/HashMap.tol	(revision 75784a8b8d00e00c07b29ed01df9b4bbbec382d8)
+++ tol_pkg/HashMap/HashMap.tol	(revision f529e3cdc96a8b5bd157c7bb6410c2b1698ed232)
@@ -16,4 +16,112 @@
 Set _.autodoc.authors = [[
    "vdebuen@tol-project.org"]];
+
+//////////////////////////////////////////////////////////////////////////////
+Text _.autodoc.member.Glossary = "Implements a glossary of unique terms";
+Class @Glossary
+//////////////////////////////////////////////////////////////////////////////
+{
+  Text _.name;
+  Set  _.terms = Copy(Empty);
+  Real _.card  = 0;
+
+  ////////////////////////////////////////////////////////////////////////////
+  Text _.autodoc.member.search = "Searchs for an existent term and returns "
+  "the position in the glossary if exists or 0 if not.";
+  Real search(Text text)
+  ////////////////////////////////////////////////////////////////////////////
+  {
+    FindIndexByName(_.terms, text)
+  };
+  ////////////////////////////////////////////////////////////////////////////
+  Text _.autodoc.member.findOrAppend = "Searchs for an existent term and "
+  "returns the position in the glossary if exists or append it to the "
+  "glossary and returns the cardinal that is the position for the last "
+  "added element.";
+  Real findOrAppend(Text text)
+  ////////////////////////////////////////////////////////////////////////////
+  {
+    Real found = search(text);
+    If(found>0, found,
+    {
+      Real c = _.card+1;
+      Set s = [[c]];
+      Real PutName(text, s[1]);
+      Set Append(_.terms,s,True);
+      Real _.card := _.card+1;
+      s[1] 
+    })
+  };
+  ////////////////////////////////////////////////////////////////////////////
+  Text _.autodoc.member.New = "Creates a new glossary";
+  Static @Glossary New(Text name)
+  ////////////////////////////////////////////////////////////////////////////
+  {
+    @Glossary new = 
+    [[
+      Text _.name = name
+    ]]
+  }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Text _.autodoc.member.Glossary = "Implements a glossary of unique terms "
+"that refers to arbitrary objects";
+Class @Glossary : 
+//////////////////////////////////////////////////////////////////////////////
+{
+  Text _.name;
+  Set  _.terms = Copy(Empty);
+  Real _.card  = 0;
+  Anything _.noFound;
+
+  ////////////////////////////////////////////////////////////////////////////
+  Text _.autodoc.member.search = "Searchs for an existent term and returns "
+  "the position in the glossary if exists or 0 if not.";
+  Real search(Text text)
+  ////////////////////////////////////////////////////////////////////////////
+  {
+    If(!Card(_.terms), 0, FindIndexByName(_.terms, text))
+  };
+  ////////////////////////////////////////////////////////////////////////////
+  Text _.autodoc.member.searchObj = "Searchs for an existent term and returns "
+  "it object if exists or _.noFound if not.";
+  Anything searchObj(Text text)
+  ////////////////////////////////////////////////////////////////////////////
+  {
+    Real idx = find(text);
+    If(idx, _.terms[idx], _.noFound)
+  };
+  ////////////////////////////////////////////////////////////////////////////
+  Text _.autodoc.member.findOrAppend = "Searchs for an existent term and "
+  "returns the position in the glossary if exists or append it to the "
+  "glossary and returns the cardinal that is the position for the last "
+  "added element.";
+  Real findOrAppend(Text text, Anything obj)
+  ////////////////////////////////////////////////////////////////////////////
+  {
+    Real found = search(text);
+    If(found>0, found,
+    {
+      Set s = [[obj]];
+      Real PutName(text, s[1]);
+      Set Append(_.terms,s,True);
+      Real _.card := _.card+1;
+      Copy(_.card)
+    })
+  };
+  ////////////////////////////////////////////////////////////////////////////
+  Text _.autodoc.member.New = "Creates a new glossary of arbitrary objects";
+  Static @Glossary New(Text name, Anything noFound)
+  ////////////////////////////////////////////////////////////////////////////
+  {
+    @Glossary new = 
+    [[
+      Text _.name = name;
+      Anything _.noFound = noFound
+    ]]
+  }
+};
+
 
 //////////////////////////////////////////////////////////////////////////////
