// Free Software Foundation, Inc.,
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-/** \mainpage The SENF Socket Library
-
-\section arch Overall Architecture
-
-\image html "../../SocketLibrary-classes.png" Class Diagram
-
- */
-
#ifndef HH_FileHandle_
#define HH_FileHandle_ 1
--- /dev/null
+/** \mainpage The SENF Socket Library
+
+ The Socket library provides a high level and object oriented
+ abstraction of the BSD socket API. The abstraction is based on
+ several concepts:
+
+ \li The basic visible interface is a handle object
+ (senf::FileHandle and it's derived classes)
+ \li The socket interface relies on a policy framework to configure
+ it's functionality
+ \li The rest of the socket API is accessible using a classic
+ inheritance hierarchy of protocol classes
+
+ The handle/body architecture provides automatic reference counted
+ management of socket instances, the policy framework provides
+ highly efficient access to the most important socket functions
+ (like reading and writing) and the inheritance hierarchy provides
+ convenient access to the multitude of special and protocol
+ dependent options.
+
+ \see \ref usage \n
+ \ref extend \n
+ \ref implementation
+ */
+
+/** \page usage Using the Socket Library
+
+ \section socket_handle The socket handle
+
+ Whenever you use the socket library, what you will be dealing with
+ are senf::FileHandle derived instances. The socket library relies
+ on reference counting to automatically manage the underlying
+ socket representation. This frees you of having to manage the
+ socket lifetime explicitly.
+
+ \attention It is very important, to (almost) always pass the socket
+ handle <em>by value</em>. The socket handle is a very lightweight
+ class and designed to be used like an ordinary built-in type. This
+ is very important in combination with the policy interface.
+
+ \section policy_framework The policy framework
+
+ The policy framework conceptually implements a list of parallel
+ inheritance hierarchies each covering a specific interface aspect
+ of the socket handle. The socket handle itself only provides
+ minimal functionality. All further functionality is relayed to a
+ policy class, or more precisely, to a group of policy classes, one
+ for each policy axis. The policy axis are
+
+ <dl>
+ <dt><em>addressingPolicy</em></dt>
+ <dd>configures, whether a socket is
+ addressable and if so, configures the address type</dd>
+
+ <dt><em>framingPolicy</em></dt>
+ <dd>configures the type of framing the socket provides: either no
+ framing providing a simple i/o stream or packet framing</dd>
+
+ <dt><em>communicationPolicy</em></dt>
+ <dd>configures,if and how the communication partner is
+ selected</dd>
+
+ <dt><em>readPolicy</em></dt>
+ <dd>configures the readability of the socket</dd>
+
+ <dt><em>writePolicy</em></dt>
+ <dd>configures the writability of the socket</dd>
+
+ <dt><em>bufferingPolicy</em></dt>
+ <dd>configures, if and how buffering is configured for a socket</dd>
+ </dl>
+
+ */
+
+/** \page extend Extending the Library
+ */
+
+/** \page implementation Implementation notes
+
+ \image html "../../SocketLibrary-classes.png" Class hierarchy
+ */
+
+
+\f
+// Local Variables:
+// mode: c++
+// mode: flyspell
+// mode: auto-fill
+// ispell-local-dictionary: "american"
+// End:
LIBS = [ 'Utils' ])
SENFSCons.Doxygen(env, extra_sources = [
- env.Dia2Png('SocketLibrary-classes.dia')
- ])
+ env.Dia2Png('SocketLibrary-classes.dia'),
+])
#content2 {
/* need non-zero top padding here to prevent margin propagation */
padding: 10px 0 0 142px;
- max-width: 60em;
+ max-width: 62em;
}
a {
color: #726921;
white-space: nowrap;
text-align: right;
- max-width: 60em;
+ max-width: 62em;
}
#footer span {
text-decoration: underline;
}
+dl.attention {
+ border: 1px solid #AADD88;
+ background-color: #EEFFDD;
+ padding: 4px;
+}
+
+dl.warning {
+ border: 1px solid #DDAA88;
+ background-color: #FFEEDD;
+ padding: 4px;
+}
+
+dl.note {
+ border: 1px solid A0C2C2;
+ background-color: #F0F8F8;
+ padding: 4px;
+}
\ No newline at end of file
def dia2png_generator(source, target, env, for_signature):
if for_signature:
- return "$DIACOM -t png -s $DIA2PNGDPI $TARGET $SOURCE"
+ return "$DIACOM -t png -s $DIA2PNGDPI,$DIA2PNGMAXWIDTH $TARGET $SOURCE"
size = dia_getSize(env,source)
if not size: return None;
size[0] = size[0]*int(env['DIA2PNGDPI'])/72
size[1] = size[1]*int(env['DIA2PNGDPI'])/72
+ if size[0] > env['DIA2PNGMAXWIDTH']:
+ size[1] = size[1]*env['DIA2PNGMAXWIDTH']/size[0]
+ size[0] = env['DIA2PNGMAXWIDTH']
return env.Action("$DIACOM -t png -s %dx%d -e $TARGET $SOURCE" % tuple(size))
Dia2Png = SCons.Builder.Builder(suffix = ".png",
env['BUILDERS']['Dia2Png'] = Dia2Png
env['DIACOM'] = "dia"
env['DIA2PNGDPI'] = 115
+ env['DIA2PNGMAXWIDTH'] = 800
def exists(env):
return env.Detect("dia")
for root, dirs, files in entries:
for f in files:
filename = os.path.normpath(os.path.join(root, f))
- if ( reduce(lambda x, y: x or fnmatch(filename, y),
+ if ( reduce(lambda x, y: x or fnmatch(f, y),
file_patterns, False)
- and not reduce(lambda x, y: x or fnmatch(filename, y),
+ and not reduce(lambda x, y: x or fnmatch(f, y),
exclude_patterns, False) ):
sources.append(filename)
if not node.sources : return None
data = DoxyfileParse(node.sources[0].abspath)
if data.get("GENERATE_HTML",'YES').upper() != 'YES' : return None
- return os.path.normpath(os.path.join( node.sources[0].abspath,
+ return os.path.normpath(os.path.join( node.sources[0].dir.abspath,
data.get("OUTPUT_DIRECTORY","."),
data.get("HTML_OUTPUT","html") ))