From da5ed6f9d4bd136888fcb96cd211a905d44c8e84 Mon Sep 17 00:00:00 2001
From: g0dil <g0dil@wiback.org>
Date: Fri, 20 Jul 2007 10:50:02 +0000
Subject: [PATCH] Socket: Add additional policy-dependency documentation to
 ClientSocketHandle Correcly handle documentation in subdirectories

---
 Packets/DefaultBundle/Doxyfile |  2 +-
 Packets/Doxyfile               |  3 +--
 Packets/MPEGDVBBundle/Doxyfile |  2 +-
 Socket/ClientSocketHandle.hh   | 27 +++++++++++++++------------
 doclib/SConscript              | 33 +++++++++++++++++++++++++++------
 doclib/senf.css                |  5 +++++
 6 files changed, 50 insertions(+), 22 deletions(-)

diff --git a/Packets/DefaultBundle/Doxyfile b/Packets/DefaultBundle/Doxyfile
index 2e8aec2b4..c221a91ce 100644
--- a/Packets/DefaultBundle/Doxyfile
+++ b/Packets/DefaultBundle/Doxyfile
@@ -1,6 +1,6 @@
 @INCLUDE         = "$(TOPDIR)/doclib/Doxyfile.global"
 
-PROJECT_NAME     = libPackets/DefaultBundle
+PROJECT_NAME     = DefaultBundle
 TAGFILES         = "$(TOPDIR)/Utils/doc/Utils.tag" "$(TOPDIR)/Packets/doc/Packets.tag"
 GENERATE_TAGFILE = doc/DefaultBundle.tag
 INPUT            = .
diff --git a/Packets/Doxyfile b/Packets/Doxyfile
index 931a153ab..b9e5c088a 100644
--- a/Packets/Doxyfile
+++ b/Packets/Doxyfile
@@ -3,7 +3,6 @@
 PROJECT_NAME     = libPackets
 TAGFILES         = "$(TOPDIR)/Utils/doc/Utils.tag"
 GENERATE_TAGFILE = doc/Packets.tag
-#INPUT            = . DefaultBundle MPEG_DVBBundle
 INPUT            = .
 
-#EXAMPLE_PATH     = . DefaultBundle
+EXAMPLE_PATH     = . DefaultBundle
diff --git a/Packets/MPEGDVBBundle/Doxyfile b/Packets/MPEGDVBBundle/Doxyfile
index 9e3a96033..db2a4692c 100644
--- a/Packets/MPEGDVBBundle/Doxyfile
+++ b/Packets/MPEGDVBBundle/Doxyfile
@@ -1,6 +1,6 @@
 @INCLUDE         = "$(TOPDIR)/doclib/Doxyfile.global"
 
-PROJECT_NAME     = libPackets/MPEGDVBBundle
+PROJECT_NAME     = MPEGDVBBundle
 TAGFILES         = "$(TOPDIR)/Utils/doc/Utils.tag" "$(TOPDIR)/Packets/doc/Packets.tag"
 GENERATE_TAGFILE = doc/MPEGDVBBundle.tag
 INPUT            = .
diff --git a/Socket/ClientSocketHandle.hh b/Socket/ClientSocketHandle.hh
index 2b6f4250a..07f206930 100644
--- a/Socket/ClientSocketHandle.hh
+++ b/Socket/ClientSocketHandle.hh
@@ -46,20 +46,23 @@ namespace senf {
 
         This class provides the client side policy interface of the socket
         abstraction. ClientSocketHandle defines the complete policy interface. It does not implement
-        any functionality itself however. All calls are forward to the following policy classes:
+        any functionality itself however. The following table shows, to which policy members each
+        group of ClientSocketHandle members is forwardd. The last collumn shows, on which other
+        policies this member-group depends <em>in the default policy classes</em>. If you define
+        your own policy classes, the dependencies are up to you.
 
         <table class="senf">
-        <tr><th>ClientSocketHandle member</th> <th>Policy member</th></tr>
-        <tr><td>read()</td>       <td>ReadPolicy::read (\ref senf::ReadPolicyBase)</td></tr>
-        <tr><td>readfrom()</td>   <td>ReadPolicy::readfrom (\ref senf::ReadPolicyBase)</td></tr>
-        <tr><td>write()</td>      <td>WritePolicy::write (\ref senf::WritePolicyBase)</td></tr>
-        <tr><td>writeto()</td>    <td>WritePolicy::writeto (\ref senf::WritePolicyBase)</td></tr>
-        <tr><td>connect()</td>    <td>AddressingPolicy::connect (\ref senf::AddressingPolicyBase)</td></tr>
-        <tr><td>bind()</td>       <td>AddressingPolicy::bind (\ref senf::AddressingPolicyBase)</td></tr>
-        <tr><td>peer()</td>       <td>AddressingPolicy::peer (\ref senf::AddressingPolicyBase)</td></tr>
-        <tr><td>local()</td>      <td>AddressingPolicy::local (\ref senf::AddressingPolicyBase)</td></tr>
-        <tr><td>rcvbuf()</td>     <td>BufferingPolicy::sndbuf (\ref senf::BufferingPolicyBase)</td></tr>
-        <tr><td>sndbuf()</td>     <td>BufferingPolicy::rcvbuf (\ref senf::BufferingPolicyBase)</td></tr>
+        <tr><th>ClientSocketHandle member</th> <th>Policy member</th> <th>Other policies</th></tr>
+        <tr><td>read()</td>       <td>ReadPolicy::read (\ref senf::ReadPolicyBase)</td>                  <td></td></tr>
+        <tr><td>readfrom()</td>   <td>ReadPolicy::readfrom (\ref senf::ReadPolicyBase)</td>              <td>UnconnectedCommunicationPolicy</td></tr>
+        <tr><td>write()</td>      <td>WritePolicy::write (\ref senf::WritePolicyBase)</td>               <td>ConnectedCommunicationPolicy</td></tr>
+        <tr><td>writeto()</td>    <td>WritePolicy::writeto (\ref senf::WritePolicyBase)</td>             <td>UnconnectedCommunicationPolicy</td></tr>
+        <tr><td>connect()</td>    <td>AddressingPolicy::connect (\ref senf::AddressingPolicyBase)</td>   <td></td></tr>
+        <tr><td>bind()</td>       <td>AddressingPolicy::bind (\ref senf::AddressingPolicyBase)</td>      <td></td></tr>
+        <tr><td>peer()</td>       <td>AddressingPolicy::peer (\ref senf::AddressingPolicyBase)</td>      <td></td></tr>
+        <tr><td>local()</td>      <td>AddressingPolicy::local (\ref senf::AddressingPolicyBase)</td>     <td></td></tr>
+        <tr><td>rcvbuf()</td>     <td>BufferingPolicy::sndbuf (\ref senf::BufferingPolicyBase)</td>      <td></td></tr>
+        <tr><td>sndbuf()</td>     <td>BufferingPolicy::rcvbuf (\ref senf::BufferingPolicyBase)</td>      <td></td></tr>
         </table>
 
         It is important to note, that not all members are always accessible. Which are depends on
diff --git a/doclib/SConscript b/doclib/SConscript
index 61b7eba64..e72656b9f 100644
--- a/doclib/SConscript
+++ b/doclib/SConscript
@@ -8,16 +8,37 @@ import SENFSCons
 import yaptu
 
 def modules():
+    # Naja ... etwas rumgehackt aber was solls ...
     global EXTRA_MODULES
-    rv = []
+    mods = {}
     ix = len(env.Dir('#').abspath)+1
     ex = dict((env.Dir(p).abspath,True) for n,p in EXTRA_MODULES)
     for module in env.Alias('all_docs')[0].sources:
         if module.name != 'html.stamp' : continue 
         if not ex.get(module.dir.abspath):
-            rv.append(('lib%s' % module.dir.dir.dir.name, module.dir.abspath[ix:]))
-    rv.sort()
-    return [ (name, env.Dir(path).abspath[ix:]) for name,path in EXTRA_MODULES ] + rv
+            mods[module.dir.dir.dir.abspath] = [ module.dir.dir.dir.name, module.dir.abspath[ix:], 0 ]
+    rv = []
+    keys = mods.keys()
+    keys.sort()
+    for mod in keys:
+        i = 0
+        while i < len(rv):
+            if mod.startswith(rv[i] + '/'):
+                level = mods[rv[i]][2] + 1
+                i += 1
+                while i < len(rv) and mods[rv[i]][2] >= level:
+                    i += 1
+                rv[i:i] = [ mod ]
+                mods[mod][2] = level
+                break
+            i += 1
+        if i == len(rv):
+            rv.append(mod)
+    return [ (name, env.Dir(path).abspath[ix:], 0) for name,path in EXTRA_MODULES
+             ] + [ ( (((not mods[mod][2]) and 'lib') or '') + mods[mod][0],
+                     mods[mod][1],
+                     mods[mod][2])
+                   for mod in rv ]
 
 def indices():
     ix = len(env.Dir('#').abspath)+1
@@ -79,8 +100,8 @@ div.tabs ul li.$projectname a { background-color: #EDE497; }
   <div id="content2">
     <div class="tabs menu">
       <ul>
-{{      for name, path in modules():
-          <li class="${name}"><a href="@TOPDIR@/${path}/index.html">${name}</a></li>
+{{      for name, path, level in modules():
+          <li class="${name} level${level}"><a href="@TOPDIR@/${path}/index.html">${name}</a></li>
 }}
       </ul>
     </div>"""
diff --git a/doclib/senf.css b/doclib/senf.css
index 4263f8f81..2df0ed65b 100644
--- a/doclib/senf.css
+++ b/doclib/senf.css
@@ -190,6 +190,11 @@ div.tabs ul li a:hover, div.tabs ul li.current a {
         background-color: #EDE497;
 }
 
+div.tabs ul li.level1 a {
+        padding-left: 2em;
+        font-size: 90%;
+}
+
 #footer {
         clear: both;
         padding: 4px 10px 4px 142px;
-- 
GitLab