diff --git a/src/lib/sub-id.hpp b/src/lib/sub-id.hpp new file mode 100644 index 000000000..8706a03aa --- /dev/null +++ b/src/lib/sub-id.hpp @@ -0,0 +1,67 @@ +/* + SUB-ID.hpp - extensible symbolic identifier + + Copyright (C) Lumiera.org + 2009, Hermann Vosseler + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + + +/** @file sub-id.hpp + ** Extensible symbolic ID type. + ** @todo (9/09) WIP-WIP-WIP just some vague emerging ideas here... + ** + ** My observation is that, during design, I did run again and again into a specific + ** situation, which I then needed to circumvent due to a lacking primary solution. + ** Learning from that experiences, I start building this structured ID template. + ** - it shall be an \em symbolic identifier, not an artificial ID + ** - the basic value set should be limited and statically type safe. + ** - possibility of structured adornments and variations + ** - optionally concealing these extensions from the interface level + ** + ** @see SubID_test + ** @see MultiFact + ** + */ + + + +#ifndef LIB_SUB_ID_H +#define LIB_SUB_ID_H + +//#include + + +namespace lib { + + + + + /** + * + */ + template + struct SubID + { + }; + + + + + +} // namespace lib +#endif diff --git a/tests/40components.tests b/tests/40components.tests index 0292330ab..1d6dacbf9 100644 --- a/tests/40components.tests +++ b/tests/40components.tests @@ -863,6 +863,11 @@ return: 0 END +PLANNED "extensible symbolic identifier" SubID_test < + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +* *****************************************************/ + + +#include "lib/test/run.hpp" + +#include "lib/sub-id.hpp" + +#include +#include +#include +#include +#include + + +namespace lib { +namespace test{ + +// using std::tr1::function; + using std::tr1::bind; + using std::tr1::placeholders::_1; + using boost::hash; + using std::vector; + using std::string; + + + namespace { // test data + + } + + + + + /**************************************************************************** + * @test for now (9/09) this is a playground for shaping a vague design idea + * - base types and casts + * - exploring some extensions + * - use this ID as Hash-Map key + * + * @see lib::SubID + */ + class SubID_test : public Test + { + + virtual void + run (Arg) + { + UNIMPLEMENTED ("SubID brainstorming"); + + checkBaseType(); + checkExtension(); + +// buildHashtable (buildIDs() ); +// buildHashtable (buildIDs() ); + } + + + void + checkBaseType () + { + } + + + void + checkExtension () + { + } + + + template + struct HashTable + : std::tr1::unordered_map > + { + void + add (KEY key) + { + *this[key] = string(key); + } + + void + verify (KEY key) + { + ASSERT (string(key) == *this[key]); + } + }; + + + template + void + buildHashtable (vector keys) + { + + typedef HashTable HTab; + HTab tab; + + for_each (keys, bind (&HTab::add, tab, _1 )); + for_each (keys, bind (&HTab::verify, tab, _1 )); + } + + + }; + + + /** Register this test class... */ + LAUNCHER (SubID_test, "unit common"); + + +}} // namespace lib::test