Index: code/branches/network/src/util/ArgReader.cc
===================================================================
--- code/branches/network/src/util/ArgReader.cc	(revision 1478)
+++ code/branches/network/src/util/ArgReader.cc	(revision 1494)
@@ -1,6 +1,5 @@
 /*
  *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
+ *                    > www.orxonox.net < *
  *
  *   License notice:
Index: code/branches/network/src/util/ArgReader.h
===================================================================
--- code/branches/network/src/util/ArgReader.h	(revision 1478)
+++ code/branches/network/src/util/ArgReader.h	(revision 1494)
@@ -1,31 +1,3 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   License notice:
- *
- *   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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Benjamin Knecht <beni_at_orxonox.net>
- *   Co-authors:
- *      ...
- *
- */
-
-/**
+/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Benjamin Knecht <beni_at_orxonox.net> *   Co-authors: *      ... * *//**
  @file  Argreader.h
  @brief reads arguments
@@ -36,8 +8,5 @@
 #define _ArgReader_H__
 
-#include "UtilPrereqs.h"
-
-#include <string>
-
+#include "UtilPrereqs.h"#include <string>
 class _UtilExport ArgReader
 {
Index: code/branches/network/src/util/CMakeLists.txt
===================================================================
--- code/branches/network/src/util/CMakeLists.txt	(revision 1478)
+++ code/branches/network/src/util/CMakeLists.txt	(revision 1494)
Index: code/branches/network/src/util/Clipboard.cc
===================================================================
--- code/branches/network/src/util/Clipboard.cc	(revision 1478)
+++ code/branches/network/src/util/Clipboard.cc	(revision 1494)
Index: code/branches/network/src/util/Clipboard.h
===================================================================
--- code/branches/network/src/util/Clipboard.h	(revision 1478)
+++ code/branches/network/src/util/Clipboard.h	(revision 1494)
Index: code/branches/network/src/util/Convert.h
===================================================================
--- code/branches/network/src/util/Convert.h	(revision 1478)
+++ code/branches/network/src/util/Convert.h	(revision 1494)
@@ -1,6 +1,5 @@
 /*
  *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
+ *                    > www.orxonox.net < *
  *
  *   License notice:
@@ -22,7 +21,5 @@
  *   Author:
  *      Benjamin Grauer
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
+ *      Fabian 'x3n' Landau *   Co-authors: *      ...
  */
 
@@ -49,586 +46,17 @@
 #pragma warning(disable:4100 4800)
 #endif
-
-
-//////////
-// MAIN //
-//////////
-
-// Enum to declare the wanted conversion preference in case of equal type-levels
-enum ConversionPreference
-{
-    CP_PreferToType,
-    CP_PreferFromType,
-};
-
-// Helper classes to determine the preferred partial template specialization
-class _ToType_   {};
-class _FromType_ {};
-class _Explicit_ {};
-
-
-// The default convert functions
-template <class FromType, class ToType, class Type>
-struct ConverterSpecialized
-{
-    enum { specialized = false };
-    static bool convert(ToType* output, const FromType& input)
-    { return false; }
-};
-
-
-// The default convert function if both types are the same
-template <class BothTypes>
-struct ConverterSpecialized<BothTypes, BothTypes, _Explicit_>
-{
-    enum { specialized = true };
-    static bool convert(BothTypes* output, const BothTypes& input)
-    { (*output) = input; return true; }
-};
-
-
-// The possible levels
-#define __low__  0 // Everything that is or behaves like a primitive type (an can be converted with a typecast to every other low-level type)
-#define __mid__  1 // Everything that has overloaded << and >> operators to operate on a std::stream
-#define __high__ 2 // Everything that doesn't fullfill the lowerlevel-requirements and therefore needs specialized conversions
-
-// Defines the levels of all types: Default is __high__ so you don't have to define every high-level type
-template <class T> struct ConverterLevel           { enum { level = __high__ }; };
-template <> struct ConverterLevel<std::string>     { enum { level = __mid__ }; };
-template <> struct ConverterLevel<orxonox::Radian> { enum { level = __mid__ }; };
-template <> struct ConverterLevel<orxonox::Degree> { enum { level = __mid__ }; };
-template <> struct ConverterLevel<int>             { enum { level = __low__ }; };
-template <> struct ConverterLevel<unsigned int>    { enum { level = __low__ }; };
-template <> struct ConverterLevel<char>            { enum { level = __low__ }; };
-template <> struct ConverterLevel<unsigned char>   { enum { level = __low__ }; };
-template <> struct ConverterLevel<short>           { enum { level = __low__ }; };
-template <> struct ConverterLevel<unsigned short>  { enum { level = __low__ }; };
-template <> struct ConverterLevel<long>            { enum { level = __low__ }; };
-template <> struct ConverterLevel<unsigned long>   { enum { level = __low__ }; };
-template <> struct ConverterLevel<float>           { enum { level = __low__ }; };
-template <> struct ConverterLevel<double>          { enum { level = __low__ }; };
-template <> struct ConverterLevel<long double>     { enum { level = __low__ }; };
-template <> struct ConverterLevel<bool>            { enum { level = __low__ }; };
-
-
-// Calculates the preference based on the levels of FromType and ToType
-template <int from, int to>
-struct ConverterPreference
-{
-    enum
-    {
-        // The maximum of both levels: element of {0, 1, 2}
-        // max 0: Both types are primitives or have a similar behaviour
-        // max 1: At least one type is not a primitive, but both can be put on a std::stream
-        // max 2: There is at least one generic type that needs specialized conversions
-        max = (from > to) ? from : to,
-
-        // The difference between both levels limited to +-1: element of {-1, 0, 1}
-        // diff -1: The FromType has higher level than the ToType
-        // diff  0: Both types have the same level
-        // diff  1: The ToType has higher level than the FromType
-        diff = ((to - from) > 1) ? 1 : (((to - from) < -1) ? -1 : to - from)
-    };
-};
-
-
-// The default conversion: This usually does nothing
-template <int max, class FromType, class ToType>
-struct ConverterDefault
-{
-    static bool convert(ToType* output, const FromType& input)
-    {
-        return false;
-    }
-};
-// The default conversion for primitives: A typecast (defined over two partial specialized templates to exclude all non-primitive types and classes)    template <int max, class FromType, class ToType>
-template <class FromType, class ToType>
-struct ConverterDefault<0, FromType, ToType>
-{
-    static bool convert(ToType* output, const FromType& input)
-    {
-        (*output) = (ToType)input;
-        return true;
-    }
-};
-
-
-// Converter: Converts input of FromType into output of ToType
-template <int diff, int max, class FromType, class ToType, ConversionPreference pref>
-struct Converter
-{
-    static bool convert(ToType* output, const FromType& input)
-    {
-        return false;
-    }
-};
-// Converter: level{FromType} > level{ToType}
-template <int max, class FromType, class ToType, ConversionPreference pref>
-struct Converter<-1, max, FromType, ToType, pref>
-{   static bool convert(ToType* output, const FromType& input)
-    { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _FromType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _FromType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };
-// Converter: level{FromType} < level{ToType}
-template <int max, class FromType, class ToType, ConversionPreference pref>
-struct Converter<1, max, FromType, ToType, pref>
-{   static bool convert(ToType* output, const FromType& input)
-    { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _ToType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _ToType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };
-// Converter: level{FromType} = level{ToType}
-// CP_PreferToType
-template <int max, class FromType, class ToType>
-struct Converter<0, max, FromType, ToType, CP_PreferToType>
-{   static bool convert(ToType* output, const FromType& input)
-    { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _ToType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _ToType_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _FromType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _FromType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };
-// CP_PreferFromType
-template <int max, class FromType, class ToType>
-struct Converter<0, max, FromType, ToType, CP_PreferFromType>
-{   static bool convert(ToType* output, const FromType& input)
-    { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _FromType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _FromType_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _ToType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _ToType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };
-
-
-// Calls the Converter::convertValue function with the correct template type parameters calculated by ConverterPreference
-template <class FromType, class ToType>
-static bool convertValue(ToType* output, const FromType& input, ConversionPreference preference = CP_PreferToType)
-{
-    return (preference == CP_PreferToType) ?
-           Converter<ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::diff,
-                     ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::max,
-                     FromType,
-                     ToType,
-                     CP_PreferToType>::convert(output, input)
-         : Converter<ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::diff,
-                     ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::max,
-                     FromType,
-                     ToType,
-                     CP_PreferFromType>::convert(output, input);
-}
-
-
-//////////////////////
-// HELPER FUNCTIONS //
-//////////////////////
-
-// Helper function: Calls convertValue with and without default value and returns true if the conversion was successful
-template<class FromType, class ToType>
-static bool ConvertValue(ToType* output, const FromType& input, ConversionPreference preference = CP_PreferToType)
-{
-    return convertValue(output, input, preference);
-}
-template<class FromType, class ToType>
-static bool ConvertValue(ToType* output, const FromType& input, const ToType& fallback, ConversionPreference preference = CP_PreferToType)
-{
-    if (convertValue(output, input, preference))
-        return true;
-
-    (*output) = fallback;
-    return false;
-}
-
-// Helper function: Calls convertValue with and without default value and returns the converted value
-template<class FromType, class ToType>
-static ToType getConvertedValue(const FromType& input, ConversionPreference preference = CP_PreferToType)
-{
-    ToType output = ToType();
-    ConvertValue(&output, input, preference);
-    return output;
-}
-template<class FromType, class ToType>
-static ToType getConvertedValue(const FromType& input, const ToType& fallback, ConversionPreference preference = CP_PreferToType)
-{
-    ToType output = fallback;
-    ConvertValue(&output, input, fallback, preference);
-    return output;
-}
-
-
+//////////// MAIN ////////////// Enum to declare the wanted conversion preference in case of equal type-levelsenum ConversionPreference{    CP_PreferToType,    CP_PreferFromType,};// Helper classes to determine the preferred partial template specializationclass _ToType_   {};class _FromType_ {};class _Explicit_ {};// The default convert functionstemplate <class FromType, class ToType, class Type>struct ConverterSpecialized{    enum { specialized = false };    static bool convert(ToType* output, const FromType& input)    { return false; }};// The default convert function if both types are the sametemplate <class BothTypes>struct ConverterSpecialized<BothTypes, BothTypes, _Explicit_>{    enum { specialized = true };    static bool convert(BothTypes* output, const BothTypes& input)    { (*output) = input; return true; }};// The possible levels#define __low__  0 // Everything that is or behaves like a primitive type (an can be converted with a typecast to every other low-level type)#define __mid__  1 // Everything that has overloaded << and >> operators to operate on a std::stream#define __high__ 2 // Everything that doesn't fullfill the lowerlevel-requirements and therefore needs specialized conversions// Defines the levels of all types: Default is __high__ so you don't have to define every high-level typetemplate <class T> struct ConverterLevel           { enum { level = __high__ }; };template <> struct ConverterLevel<std::string>     { enum { level = __mid__ }; };template <> struct ConverterLevel<orxonox::Radian> { enum { level = __mid__ }; };template <> struct ConverterLevel<orxonox::Degree> { enum { level = __mid__ }; };template <> struct ConverterLevel<int>             { enum { level = __low__ }; };template <> struct ConverterLevel<unsigned int>    { enum { level = __low__ }; };template <> struct ConverterLevel<char>            { enum { level = __low__ }; };template <> struct ConverterLevel<unsigned char>   { enum { level = __low__ }; };template <> struct ConverterLevel<short>           { enum { level = __low__ }; };template <> struct ConverterLevel<unsigned short>  { enum { level = __low__ }; };template <> struct ConverterLevel<long>            { enum { level = __low__ }; };template <> struct ConverterLevel<unsigned long>   { enum { level = __low__ }; };template <> struct ConverterLevel<float>           { enum { level = __low__ }; };template <> struct ConverterLevel<double>          { enum { level = __low__ }; };template <> struct ConverterLevel<long double>     { enum { level = __low__ }; };template <> struct ConverterLevel<bool>            { enum { level = __low__ }; };// Calculates the preference based on the levels of FromType and ToTypetemplate <int from, int to>struct ConverterPreference{    enum    {        // The maximum of both levels: element of {0, 1, 2}        // max 0: Both types are primitives or have a similar behaviour        // max 1: At least one type is not a primitive, but both can be put on a std::stream        // max 2: There is at least one generic type that needs specialized conversions        max = (from > to) ? from : to,        // The difference between both levels limited to +-1: element of {-1, 0, 1}        // diff -1: The FromType has higher level than the ToType        // diff  0: Both types have the same level        // diff  1: The ToType has higher level than the FromType        diff = ((to - from) > 1) ? 1 : (((to - from) < -1) ? -1 : to - from)    };};// The default conversion: This usually does nothingtemplate <int max, class FromType, class ToType>struct ConverterDefault{    static bool convert(ToType* output, const FromType& input)    {        return false;    }};// The default conversion for primitives: A typecast (defined over two partial specialized templates to exclude all non-primitive types and classes)    template <int max, class FromType, class ToType>template <class FromType, class ToType>struct ConverterDefault<0, FromType, ToType>{    static bool convert(ToType* output, const FromType& input)    {        (*output) = (ToType)input;        return true;    }};// Converter: Converts input of FromType into output of ToTypetemplate <int diff, int max, class FromType, class ToType, ConversionPreference pref>struct Converter{    static bool convert(ToType* output, const FromType& input)    {        return false;    }};// Converter: level{FromType} > level{ToType}template <int max, class FromType, class ToType, ConversionPreference pref>struct Converter<-1, max, FromType, ToType, pref>{   static bool convert(ToType* output, const FromType& input)    { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _FromType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _FromType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };// Converter: level{FromType} < level{ToType}template <int max, class FromType, class ToType, ConversionPreference pref>struct Converter<1, max, FromType, ToType, pref>{   static bool convert(ToType* output, const FromType& input)    { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _ToType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _ToType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };// Converter: level{FromType} = level{ToType}// CP_PreferToTypetemplate <int max, class FromType, class ToType>struct Converter<0, max, FromType, ToType, CP_PreferToType>{   static bool convert(ToType* output, const FromType& input)    { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _ToType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _ToType_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _FromType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _FromType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };// CP_PreferFromTypetemplate <int max, class FromType, class ToType>struct Converter<0, max, FromType, ToType, CP_PreferFromType>{   static bool convert(ToType* output, const FromType& input)    { return (ConverterSpecialized<FromType, ToType, _Explicit_>::specialized) ? (ConverterSpecialized<FromType, ToType, _Explicit_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _FromType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _FromType_>::convert(output, input)) : (ConverterSpecialized<FromType, ToType, _ToType_>::specialized) ? (ConverterSpecialized<FromType, ToType, _ToType_>::convert(output, input)) : (ConverterDefault<max, FromType, ToType>::convert(output, input)); } };// Calls the Converter::convertValue function with the correct template type parameters calculated by ConverterPreferencetemplate <class FromType, class ToType>static bool convertValue(ToType* output, const FromType& input, ConversionPreference preference = CP_PreferToType){    return (preference == CP_PreferToType) ?           Converter<ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::diff,                     ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::max,                     FromType,                     ToType,                     CP_PreferToType>::convert(output, input)         : Converter<ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::diff,                     ConverterPreference<ConverterLevel<FromType>::level, ConverterLevel<ToType>::level>::max,                     FromType,                     ToType,                     CP_PreferFromType>::convert(output, input);}//////////////////////// HELPER FUNCTIONS ////////////////////////// Helper function: Calls convertValue with and without default value and returns true if the conversion was successfultemplate<class FromType, class ToType>static bool ConvertValue(ToType* output, const FromType& input, ConversionPreference preference = CP_PreferToType){    return convertValue(output, input, preference);}template<class FromType, class ToType>static bool ConvertValue(ToType* output, const FromType& input, const ToType& fallback, ConversionPreference preference = CP_PreferToType){    if (convertValue(output, input, preference))        return true;    (*output) = fallback;    return false;}// Helper function: Calls convertValue with and without default value and returns the converted valuetemplate<class FromType, class ToType>static ToType getConvertedValue(const FromType& input, ConversionPreference preference = CP_PreferToType){    ToType output = ToType();    ConvertValue(&output, input, preference);    return output;}template<class FromType, class ToType>static ToType getConvertedValue(const FromType& input, const ToType& fallback, ConversionPreference preference = CP_PreferToType){    ToType output = fallback;    ConvertValue(&output, input, fallback, preference);    return output;}
 /////////////////////
 // SPECIALIZATIONS //
 /////////////////////
-
-/////////////
-// SAMPLES //
-/////////////
-/*
-// convert everything to xyz
-template <class FromType>
-struct ConverterSpecialized<FromType, xyz, _ToType_>
-{
-    enum { specialized = true };
-    static bool convert(xyz* output, const FromType& input)
-    { return ...; }
-};
-
-// convert xyz to everything
-template <class ToType>
-struct ConverterSpecialized<xyz, ToType, _FromType_>
-{
-    enum { specialized = true };
-    static bool convert(ToType* output, const xyz& input)
-    { return ...; }
-};
-
-// convert abc to xyz
-template <>
-struct ConverterSpecialized<abc, xyz, _Explicit_>
-{
-    enum { specialized = true };
-    static bool convert(xyz* output, const abc& input)
-    { return ...; }
-};
-*/
-
-////////////
-// STRING //
-////////////
-
-// convert to string
-template <class FromType>
-struct ConverterSpecialized<FromType, std::string, _ToType_>
-{
-    enum { specialized = true };
-    static bool convert(std::string* output, const FromType& input)
-    {
-        std::ostringstream oss;
-        if (oss << input)
-        {
-            (*output) = oss.str();
-            return true;
-        }
-        else
-            return false;
-    }
-};
-
-// convert from string
-template <class ToType>
-struct ConverterSpecialized<std::string, ToType, _FromType_>
-{
-    enum { specialized = true };
-    static bool convert(ToType* output, const std::string& input)
-    {
-        std::istringstream iss(input);
-        if (iss >> (*output))
-            return true;
-        else
-            return false;
-    }
-};
-
-
-////////////////
-// MULTITYPES //
-////////////////
-
-// convert from MultiTypePrimitive
-template <class ToType>
-struct ConverterSpecialized<MultiTypePrimitive, ToType, _FromType_>
-{
-    enum { specialized = true };
-    static bool convert(ToType* output, const MultiTypePrimitive& input)
-    {
-        if (input.getType() == MT_void)
-            return ConvertValue(output, input.getVoid());
-        else if (input.getType() == MT_int)
-            return ConvertValue(output, input.getInt());
-        else if (input.getType() == MT_uint)
-            return ConvertValue(output, input.getUnsignedInt());
-        else if (input.getType() == MT_char)
-            return ConvertValue(output, input.getChar());
-        else if (input.getType() == MT_uchar)
-            return ConvertValue(output, input.getUnsignedChar());
-        else if (input.getType() == MT_short)
-            return ConvertValue(output, input.getShort());
-        else if (input.getType() == MT_ushort)
-            return ConvertValue(output, input.getUnsignedShort());
-        else if (input.getType() == MT_long)
-            return ConvertValue(output, input.getLong());
-        else if (input.getType() == MT_ulong)
-            return ConvertValue(output, input.getUnsignedLong());
-        else if (input.getType() == MT_float)
-            return ConvertValue(output, input.getFloat());
-        else if (input.getType() == MT_double)
-            return ConvertValue(output, input.getDouble());
-        else if (input.getType() == MT_longdouble)
-            return ConvertValue(output, input.getLongDouble());
-        else if (input.getType() == MT_bool)
-            return ConvertValue(output, input.getBool());
-        else
-            return false;
-    }
-};
-
-// convert from MultiTypeString
-template <class ToType>
-struct ConverterSpecialized<MultiTypeString, ToType, _FromType_>
-{
-    enum { specialized = true };
-    static bool convert(ToType* output, const MultiTypeString& input)
-    {
-        if (input.getType() == MT_constchar)
-            return ConvertValue(output, input.getConstChar());
-        else if (input.getType() == MT_string)
-            return ConvertValue(output, input.getString());
-        else
-            return ConvertValue(output, (MultiTypePrimitive)input);
-    }
-};
-
-// convert from MultiTypeMath
-template <class ToType>
-struct ConverterSpecialized<MultiTypeMath, ToType, _FromType_>
-{
-    enum { specialized = true };
-    static bool convert(ToType* output, const MultiTypeMath& input)
-    {
-        if (input.getType() == MT_vector2)
-            return ConvertValue(output, input.getVector2());
-        else if (input.getType() == MT_vector3)
-            return ConvertValue(output, input.getVector3());
-        else if (input.getType() == MT_vector4)
-            return ConvertValue(output, input.getVector4());
-        else if (input.getType() == MT_quaternion)
-            return ConvertValue(output, input.getQuaternion());
-        else if (input.getType() == MT_colourvalue)
-            return ConvertValue(output, input.getColourValue());
-        else if (input.getType() == MT_radian)
-            return ConvertValue(output, input.getRadian());
-        else if (input.getType() == MT_degree)
-            return ConvertValue(output, input.getDegree());
-        else
-            return ConvertValue(output, (MultiTypeString)input);
-    }
-};
-
-
+/////////////// SAMPLES ////////////////*// convert everything to xyztemplate <class FromType>struct ConverterSpecialized<FromType, xyz, _ToType_>{    enum { specialized = true };    static bool convert(xyz* output, const FromType& input)    { return ...; }};// convert xyz to everythingtemplate <class ToType>struct ConverterSpecialized<xyz, ToType, _FromType_>{    enum { specialized = true };    static bool convert(ToType* output, const xyz& input)    { return ...; }};// convert abc to xyztemplate <>struct ConverterSpecialized<abc, xyz, _Explicit_>{    enum { specialized = true };    static bool convert(xyz* output, const abc& input)    { return ...; }};*/////////////// STRING //////////////// convert to stringtemplate <class FromType>struct ConverterSpecialized<FromType, std::string, _ToType_>{    enum { specialized = true };    static bool convert(std::string* output, const FromType& input)    {        std::ostringstream oss;        if (oss << input)        {            (*output) = oss.str();            return true;        }        else            return false;    }};// convert from stringtemplate <class ToType>struct ConverterSpecialized<std::string, ToType, _FromType_>{    enum { specialized = true };    static bool convert(ToType* output, const std::string& input)    {        std::istringstream iss(input);        if (iss >> (*output))            return true;        else            return false;    }};////////////////// MULTITYPES //////////////////// convert from MultiTypePrimitivetemplate <class ToType>struct ConverterSpecialized<MultiTypePrimitive, ToType, _FromType_>{    enum { specialized = true };    static bool convert(ToType* output, const MultiTypePrimitive& input)    {        if (input.getType() == MT_void)            return ConvertValue(output, input.getVoid());        else if (input.getType() == MT_int)            return ConvertValue(output, input.getInt());        else if (input.getType() == MT_uint)            return ConvertValue(output, input.getUnsignedInt());        else if (input.getType() == MT_char)            return ConvertValue(output, input.getChar());        else if (input.getType() == MT_uchar)            return ConvertValue(output, input.getUnsignedChar());        else if (input.getType() == MT_short)            return ConvertValue(output, input.getShort());        else if (input.getType() == MT_ushort)            return ConvertValue(output, input.getUnsignedShort());        else if (input.getType() == MT_long)            return ConvertValue(output, input.getLong());        else if (input.getType() == MT_ulong)            return ConvertValue(output, input.getUnsignedLong());        else if (input.getType() == MT_float)            return ConvertValue(output, input.getFloat());        else if (input.getType() == MT_double)            return ConvertValue(output, input.getDouble());        else if (input.getType() == MT_longdouble)            return ConvertValue(output, input.getLongDouble());        else if (input.getType() == MT_bool)            return ConvertValue(output, input.getBool());        else            return false;    }};// convert from MultiTypeStringtemplate <class ToType>struct ConverterSpecialized<MultiTypeString, ToType, _FromType_>{    enum { specialized = true };    static bool convert(ToType* output, const MultiTypeString& input)    {        if (input.getType() == MT_constchar)            return ConvertValue(output, input.getConstChar());        else if (input.getType() == MT_string)            return ConvertValue(output, input.getString());        else            return ConvertValue(output, (MultiTypePrimitive)input);    }};// convert from MultiTypeMathtemplate <class ToType>struct ConverterSpecialized<MultiTypeMath, ToType, _FromType_>{    enum { specialized = true };    static bool convert(ToType* output, const MultiTypeMath& input)    {        if (input.getType() == MT_vector2)            return ConvertValue(output, input.getVector2());        else if (input.getType() == MT_vector3)            return ConvertValue(output, input.getVector3());        else if (input.getType() == MT_vector4)            return ConvertValue(output, input.getVector4());        else if (input.getType() == MT_quaternion)            return ConvertValue(output, input.getQuaternion());        else if (input.getType() == MT_colourvalue)            return ConvertValue(output, input.getColourValue());        else if (input.getType() == MT_radian)            return ConvertValue(output, input.getRadian());        else if (input.getType() == MT_degree)            return ConvertValue(output, input.getDegree());        else            return ConvertValue(output, (MultiTypeString)input);    }};
 ////////////////////
 // MATH TO STRING //
 ////////////////////
-
-// Vector2 to std::string
-template <>
-struct ConverterSpecialized<orxonox::Vector2, std::string, _Explicit_>
-{
-    enum { specialized = true };
-    static bool convert(std::string* output, const orxonox::Vector2& input)
-    {
-        std::ostringstream ostream;
-        if (ostream << input.x << "," << input.y)
-        {
-            (*output) = ostream.str();
-            return true;
-        }
-        return false;
-    }
-};
-
-// Vector3 to std::string
-template <>
-struct ConverterSpecialized<orxonox::Vector3, std::string, _Explicit_>
-{
-    enum { specialized = true };
-    static bool convert(std::string* output, const orxonox::Vector3& input)
-    {
-        std::ostringstream ostream;
-        if (ostream << input.x << "," << input.y << "," << input.z)
-        {
-            (*output) = ostream.str();
-            return true;
-        }
-        return false;
-    }
-};
-
-// Vector4 to std::string
-template <>
-struct ConverterSpecialized<orxonox::Vector4, std::string, _Explicit_>
-{
-    enum { specialized = true };
-    static bool convert(std::string* output, const orxonox::Vector4& input)
-    {
-        std::ostringstream ostream;
-        if (ostream << input.x << "," << input.y << "," << input.z << "," << input.w)
-        {
-            (*output) = ostream.str();
-            return true;
-        }
-        return false;
-    }
-};
-
-// Quaternion to std::string
-template <>
-struct ConverterSpecialized<orxonox::Quaternion, std::string, _Explicit_>
-{
-    enum { specialized = true };
-    static bool convert(std::string* output, const orxonox::Quaternion& input)
-    {
-        std::ostringstream ostream;
-        if (ostream << input.w << "," << input.x << "," << input.y << "," << input.z)
-        {
-            (*output) = ostream.str();
-            return true;
-        }
-        return false;
-    }
-};
-
-// ColourValue to std::string
-template <>
-struct ConverterSpecialized<orxonox::ColourValue, std::string, _Explicit_>
-{
-    enum { specialized = true };
-    static bool convert(std::string* output, const orxonox::ColourValue& input)
-    {
-        std::ostringstream ostream;
-        if (ostream << input.r << "," << input.g << "," << input.b << "," << input.a)
-        {
-            (*output) = ostream.str();
-            return true;
-        }
-        return false;
-    }
-};
-
-
-////////////////////
+// Vector2 to std::stringtemplate <>struct ConverterSpecialized<orxonox::Vector2, std::string, _Explicit_>{    enum { specialized = true };    static bool convert(std::string* output, const orxonox::Vector2& input)    {        std::ostringstream ostream;        if (ostream << input.x << "," << input.y)        {            (*output) = ostream.str();            return true;        }        return false;    }};// Vector3 to std::stringtemplate <>struct ConverterSpecialized<orxonox::Vector3, std::string, _Explicit_>{    enum { specialized = true };    static bool convert(std::string* output, const orxonox::Vector3& input)    {        std::ostringstream ostream;        if (ostream << input.x << "," << input.y << "," << input.z)        {            (*output) = ostream.str();            return true;        }        return false;    }};// Vector4 to std::stringtemplate <>struct ConverterSpecialized<orxonox::Vector4, std::string, _Explicit_>{    enum { specialized = true };    static bool convert(std::string* output, const orxonox::Vector4& input)    {        std::ostringstream ostream;        if (ostream << input.x << "," << input.y << "," << input.z << "," << input.w)        {            (*output) = ostream.str();            return true;        }        return false;    }};// Quaternion to std::stringtemplate <>struct ConverterSpecialized<orxonox::Quaternion, std::string, _Explicit_>{    enum { specialized = true };    static bool convert(std::string* output, const orxonox::Quaternion& input)    {        std::ostringstream ostream;        if (ostream << input.w << "," << input.x << "," << input.y << "," << input.z)        {            (*output) = ostream.str();            return true;        }        return false;    }};// ColourValue to std::stringtemplate <>struct ConverterSpecialized<orxonox::ColourValue, std::string, _Explicit_>{    enum { specialized = true };    static bool convert(std::string* output, const orxonox::ColourValue& input)    {        std::ostringstream ostream;        if (ostream << input.r << "," << input.g << "," << input.b << "," << input.a)        {            (*output) = ostream.str();            return true;        }        return false;    }};////////////////////
 // STRING TO MATH //
 ////////////////////
-
-// std::string to Vector2
-template <>
-struct ConverterSpecialized<std::string, orxonox::Vector2, _Explicit_>
-{
-    enum { specialized = true };
-    static bool convert(orxonox::Vector2* output, const std::string& input)
-    {
-        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');
-        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }
-
-        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');
-        if (tokens.size() >= 2)
-        {
-            if (!ConvertValue(&(output->x), tokens[0]))
-                return false;
-            if (!ConvertValue(&(output->y), tokens[1]))
-                return false;
-
-            return true;
-        }
-        return false;
-    }
-};
-
-// std::string to Vector3
-template <>
-struct ConverterSpecialized<std::string, orxonox::Vector3, _Explicit_>
-{
-    enum { specialized = true };
-    static bool convert(orxonox::Vector3* output, const std::string& input)
-    {
-        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');
-        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }
-
-        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');
-        if (tokens.size() >= 3)
-        {
-            if (!ConvertValue(&(output->x), tokens[0]))
-                return false;
-            if (!ConvertValue(&(output->y), tokens[1]))
-                return false;
-            if (!ConvertValue(&(output->z), tokens[2]))
-                return false;
-
-            return true;
-        }
-        return false;
-    }
-};
-
-// std::string to Vector4
-template <>
-struct ConverterSpecialized<std::string, orxonox::Vector4, _Explicit_>
-{
-    enum { specialized = true };
-    static bool convert(orxonox::Vector4* output, const std::string& input)
-    {
-        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');
-        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }
-
-        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');
-        if (tokens.size() >= 4)
-        {
-            if (!ConvertValue(&(output->x), tokens[0]))
-                return false;
-            if (!ConvertValue(&(output->y), tokens[1]))
-                return false;
-            if (!ConvertValue(&(output->z), tokens[2]))
-                return false;
-            if (!ConvertValue(&(output->w), tokens[3]))
-                return false;
-
-            return true;
-        }
-        return false;
-    }
-};
-
-// std::string to Quaternion
-template <>
-struct ConverterSpecialized<std::string, orxonox::Quaternion, _Explicit_>
-{
-    enum { specialized = true };
-    static bool convert(orxonox::Quaternion* output, const std::string& input)
-    {
-        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');
-        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }
-
-        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');
-        if (tokens.size() >= 4)
-        {
-            if (!ConvertValue(&(output->w), tokens[0]))
-                return false;
-            if (!ConvertValue(&(output->x), tokens[1]))
-                return false;
-            if (!ConvertValue(&(output->y), tokens[2]))
-                return false;
-            if (!ConvertValue(&(output->z), tokens[3]))
-                return false;
-
-            return true;
-        }
-        return false;
-    }
-};
-
-// std::string to ColourValue
-template <>
-struct ConverterSpecialized<std::string, orxonox::ColourValue, _Explicit_>
-{
-    enum { specialized = true };
-    static bool convert(orxonox::ColourValue* output, const std::string& input)
-    {
-        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');
-        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }
-
-        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');
-        if (tokens.size() >= 4)
-        {
-            if (!ConvertValue(&(output->r), tokens[0]))
-                return false;
-            if (!ConvertValue(&(output->g), tokens[1]))
-                return false;
-            if (!ConvertValue(&(output->b), tokens[2]))
-                return false;
-            if (!ConvertValue(&(output->a), tokens[3]))
-                return false;
-
-            return true;
-        }
-        return false;
-    }
-};
-
-#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
+// std::string to Vector2template <>struct ConverterSpecialized<std::string, orxonox::Vector2, _Explicit_>{    enum { specialized = true };    static bool convert(orxonox::Vector2* output, const std::string& input)    {        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');        if (tokens.size() >= 2)        {            if (!ConvertValue(&(output->x), tokens[0]))                return false;            if (!ConvertValue(&(output->y), tokens[1]))                return false;            return true;        }        return false;    }};// std::string to Vector3template <>struct ConverterSpecialized<std::string, orxonox::Vector3, _Explicit_>{    enum { specialized = true };    static bool convert(orxonox::Vector3* output, const std::string& input)    {        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');        if (tokens.size() >= 3)        {            if (!ConvertValue(&(output->x), tokens[0]))                return false;            if (!ConvertValue(&(output->y), tokens[1]))                return false;            if (!ConvertValue(&(output->z), tokens[2]))                return false;            return true;        }        return false;    }};// std::string to Vector4template <>struct ConverterSpecialized<std::string, orxonox::Vector4, _Explicit_>{    enum { specialized = true };    static bool convert(orxonox::Vector4* output, const std::string& input)    {        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');        if (tokens.size() >= 4)        {            if (!ConvertValue(&(output->x), tokens[0]))                return false;            if (!ConvertValue(&(output->y), tokens[1]))                return false;            if (!ConvertValue(&(output->z), tokens[2]))                return false;            if (!ConvertValue(&(output->w), tokens[3]))                return false;            return true;        }        return false;    }};// std::string to Quaterniontemplate <>struct ConverterSpecialized<std::string, orxonox::Quaternion, _Explicit_>{    enum { specialized = true };    static bool convert(orxonox::Quaternion* output, const std::string& input)    {        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');        if (tokens.size() >= 4)        {            if (!ConvertValue(&(output->w), tokens[0]))                return false;            if (!ConvertValue(&(output->x), tokens[1]))                return false;            if (!ConvertValue(&(output->y), tokens[2]))                return false;            if (!ConvertValue(&(output->z), tokens[3]))                return false;            return true;        }        return false;    }};// std::string to ColourValuetemplate <>struct ConverterSpecialized<std::string, orxonox::ColourValue, _Explicit_>{    enum { specialized = true };    static bool convert(orxonox::ColourValue* output, const std::string& input)    {        unsigned int opening_parenthesis, closing_parenthesis = input.find(')');        if ((opening_parenthesis = input.find('(')) == std::string::npos) { opening_parenthesis = 0; } else { opening_parenthesis++; }        SubString tokens(input.substr(opening_parenthesis, closing_parenthesis - opening_parenthesis), ",", SubString::WhiteSpaces, false, '\\', true, '"', true, '\0', '\0', true, '\0');        if (tokens.size() >= 4)        {            if (!ConvertValue(&(output->r), tokens[0]))                return false;            if (!ConvertValue(&(output->g), tokens[1]))                return false;            if (!ConvertValue(&(output->b), tokens[2]))                return false;            if (!ConvertValue(&(output->a), tokens[3]))                return false;            return true;        }        return false;    }};#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
 #pragma warning(pop)
 #endif
-
 #endif /* _Convert_H__ */
Index: code/branches/network/src/util/ExprParser.cc
===================================================================
--- code/branches/network/src/util/ExprParser.cc	(revision 1478)
+++ code/branches/network/src/util/ExprParser.cc	(revision 1494)
@@ -1,6 +1,5 @@
 /*
  *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
+ *                    > www.orxonox.net < *
  *
  *   License notice:
@@ -31,421 +30,3 @@
   @brief Declaration of FloatParser
 */
-
-#include "ExprParser.h"
-#include <cmath>
-#include <cstring>
-
-// macros for easier if, else statements
-#define CASE_1(var) if (!strcmp(SWITCH,var))
-#define CASE(var) else if (!strcmp(SWITCH,var))
-#define CASE_ELSE else
-
-//! skip white spaces
-#define PARSE_BLANKS while (*reading_stream == ' ') ++reading_stream;
-
-ExprParser::ExprParser(const std::string& str)
-{
-  this->failed_ = false;
-  this->reading_stream = str.c_str();
-  if (str.size() == 0 || *reading_stream == '\0')
-  {
-    this->failed_ = true;
-    this->result_ = 0.0;
-  }
-  else
-  {
-    this->result_ = parse_expr_8();
-    this->remains_ = reading_stream;
-  }
-}
-
-//Private functions:
-/******************/
-double ExprParser::parse_argument()
-{
-   double value = parse_expr_8();
-   if (*reading_stream == ',')
-   {
-      ++reading_stream;
-      return value;
-   }
-   else
-   {
-     this->failed_ = true;
-     return 0;
-   }
-}
-
-double ExprParser::parse_last_argument()
-{
-   double value = parse_expr_8();
-   if (*reading_stream == ')')
-   {
-      ++reading_stream;
-      return value;
-   }
-   else
-   {
-     this->failed_ = true;
-     return 0;
-   }
-}
-
-double ExprParser::parse_expr_8()
-{
-   double value = parse_expr_7();
-   for(;;)
-   {
-      switch (op)
-      {
-         case oder:
-            value = parse_expr_7() || value;
-            break;
-         default: return value;
-      }
-   };
-}
-
-
-double ExprParser::parse_expr_7()
-{
-   double value = parse_expr_6();
-   for(;;)
-   {
-      switch (op)
-      {
-         case und:
-            value = value && parse_expr_6();
-            break;
-         default: return value;
-      }
-   };
-}
-
-double ExprParser::parse_expr_6()
-{
-   double value = parse_expr_5();
-   for(;;)
-   {
-      switch (op)
-      {
-         case gleich:
-            value = (value == parse_expr_5());
-            break;
-         case ungleich:
-            value = (value != parse_expr_5());
-            break;
-         default:
-            return value;
-      }
-   };
-}
-
-double ExprParser::parse_expr_5()
-{
-   double value = parse_expr_4();
-   for(;;)
-   {
-      switch (op)
-      {
-         case kleiner:
-            value = (value < parse_expr_4());
-            break;
-         case kleinergleich:
-            value = (value <= parse_expr_4());
-            break;
-         case groesser:
-            value = (value > parse_expr_4());
-            break;
-         case groessergleich:
-            value = (value >= parse_expr_4());
-            break;
-         default:
-            return value;
-      }
-   };
-}
-
-double ExprParser::parse_expr_4()
-{
-   double value = parse_expr_3();
-   for(;;)
-   {
-      switch (op)
-      {
-         case b_plus:
-            value += parse_expr_3();
-            break;
-         case b_minus:
-            value -= parse_expr_3();
-            break;
-         default:
-            return value;
-      }
-   };
-}
-
-double ExprParser::parse_expr_3()
-{
-   double value = parse_expr_2();
-   for(;;)
-   {
-      switch (op)
-      {
-         case mal:
-            value *= parse_expr_2();
-            break;
-         case durch:
-            value /= parse_expr_2();
-            break;
-         case modulo:
-         {
-            double temp = parse_expr_2();
-            value = value - floor(value/temp)*temp;
-            break;
-         }
-         default:
-            return value;
-      }
-   };
-}
-
-double ExprParser::parse_expr_2()
-{
-   double value = parse_expr_1();
-   while (*reading_stream != '\0')
-   {
-      op = parse_binary_operator();
-      switch (op)
-      {
-         case hoch:
-            value = pow(value,parse_expr_1());
-            break;
-         default:
-            return value;
-      }
-   };
-   op = undef;
-   return value;
-}
-
-double ExprParser::parse_expr_1()
-{
-   PARSE_BLANKS
-   double value;
-
-   unary_operator op = parse_unary_operator();
-   PARSE_BLANKS
-
-   if (*reading_stream == '\0')
-   {
-     // end of string
-     this->failed_ = true;
-     return 0;
-   }
-   else if (*reading_stream > 47 && *reading_stream < 59 || *reading_stream == 46)
-   {  // number
-      value = strtod(reading_stream, const_cast<char**>(&reading_stream));
-   }
-   else if (*reading_stream > 64 && *reading_stream < 91 || *reading_stream > 96 && *reading_stream < 123 || *reading_stream == 46)
-   {  // variable or function
-      char* word = new char[256];
-      parse_word(word);
-      PARSE_BLANKS
-      if (*reading_stream == '(')
-      {
-         ++reading_stream;
-#define SWITCH word
-         CASE_1("sin")
-            value = sin(parse_last_argument());
-         CASE("asin")
-            value = asin(parse_last_argument());
-         CASE("sinh")
-            value = sinh(parse_last_argument());
-         CASE("asinh")
-         {
-            value = parse_last_argument();
-            value = log(sqrt(pow(value, 2) + 1) + value);
-         }
-         CASE("cos")
-            value = cos(parse_last_argument());
-         CASE("acos")
-            value = acos(parse_last_argument());
-         CASE("cosh")
-            value = cosh(parse_last_argument());
-         CASE("acosh")
-         {
-            value = parse_last_argument();
-            value = log(sqrt(pow(value, 2) - 1) + value);
-         }
-         CASE("tan")
-            value = tan(parse_last_argument());
-         CASE("atan")
-            value = atan(parse_last_argument());
-         CASE("atan2")
-            value = atan2(parse_argument(),parse_last_argument());
-         CASE("tanh")
-            value = tanh(parse_last_argument());
-         CASE("atanh")
-         {
-            value = parse_last_argument();
-            value = 0.5*log((value + 1)/(value - 1));
-         }
-         CASE("int")
-            value = floor(parse_last_argument());
-         CASE("floor")
-            value = floor(parse_last_argument());
-         CASE("ceil")
-            value = ceil(parse_last_argument());
-         CASE("abs")
-            value = fabs(parse_last_argument());
-         CASE("exp")
-            value = exp(parse_last_argument());
-         CASE("log")
-            value = log10(parse_last_argument());
-         CASE("ln")
-            value = log(parse_last_argument());
-         CASE("sign")
-         {
-            value = parse_last_argument();
-            value = (value>0 ? 1 : (value<0 ? -1 : 0));
-         }
-         CASE("sqrt")
-            value = sqrt(parse_last_argument());
-         CASE("degrees")
-            value = parse_last_argument()*180/3.1415926535897932;
-         CASE("radians")
-            value = parse_last_argument()*3.1415926535897932/180;
-         CASE("mod")
-         {
-            value = parse_argument();
-            double value2 = parse_last_argument();
-            value = value - floor(value/value2)*value2;
-         }
-         CASE("pow")
-            value = pow(parse_argument(),parse_last_argument());
-         CASE("div")
-            value = floor(parse_argument()/parse_last_argument());
-         CASE("max")
-           value = std::max(parse_argument(),parse_last_argument());
-         CASE("min")
-           value = std::min(parse_argument(),parse_last_argument());
-         CASE_ELSE
-         {
-           this->failed_ = true;
-           delete[] word;
-           return 0;
-         }
-      }
-      else
-      {
-#define SWITCH word
-         CASE_1("pi")
-           value = 3.1415926535897932;
-         CASE("e")
-           value = 2.7182818284590452;
-         CASE_ELSE
-         {
-           this->failed_ = true;
-           delete[] word;
-           return 0;
-         }
-      }
-      delete[] word;
-   }
-   else if (*reading_stream == 40)
-   {  // expresion in paranthesis
-      ++reading_stream;
-      value = parse_last_argument();
-   }
-   else
-   {
-     this->failed_ = true;
-     return 0;
-   }
-
-   PARSE_BLANKS
-   switch (op)
-   {
-      case u_nicht: return !value;
-      case u_plus:  return  value;
-      case u_minus: return -value;
-      default:
-        {
-          this->failed_ = true;
-          return 0;
-        }
-   }
-}
-
-char* ExprParser::parse_word(char* str)
-{
-   char* word = str;
-   int counter = 0;
-   while (*reading_stream > 47 && *reading_stream < 58 || *reading_stream > 64 && *reading_stream < 91 || *reading_stream > 96 && *reading_stream < 123 || *reading_stream == 46)
-   {
-      *word++ = *reading_stream++;
-      counter++;
-      if (counter > 255)
-      {
-        this->failed_ = true;
-        return '\0';
-      }
-   };
-   *word = '\0';
-   return str;
-}
-
-ExprParser::binary_operator ExprParser::parse_binary_operator()
-{
-   binary_operator op;
-   switch (*reading_stream)
-   {
-      case '+': op = b_plus; break;
-      case '-': op = b_minus; break;
-      case '*': op = mal; break;
-      case '/': op = durch; break;
-      case '^': op = hoch; break;
-      case '%': op = modulo; break;
-      case '&': op = und; break;
-      case '|': op = oder; break;
-      case '=': op = gleich; break;
-      case '!': op = b_nicht; break;
-      case '<': op = kleiner; break;
-      case '>': op = groesser; break;
-      default: return undef;
-   }
-   if (*++reading_stream == '=')
-   {
-      if (op > 9)
-      {
-         ++reading_stream;
-         return (binary_operator)(op + 3);
-      }
-      else
-      {
-         --reading_stream;
-         return undef;
-      }
-   }
-   else
-      return op;
-}
-
-ExprParser::unary_operator ExprParser::parse_unary_operator()
-{
-   switch (*reading_stream)
-   {
-      case '!':
-         ++reading_stream;
-         return u_nicht;
-      case '+':
-         ++reading_stream;
-         return u_plus;
-      case '-':
-         ++reading_stream;
-         return u_minus;
-      default :
-         return u_plus;
-   }
-}
+#include "ExprParser.h"#include <cmath>#include <cstring>// macros for easier if, else statements#define CASE_1(var) if (!strcmp(SWITCH,var))#define CASE(var) else if (!strcmp(SWITCH,var))#define CASE_ELSE else//! skip white spaces#define PARSE_BLANKS while (*reading_stream == ' ') ++reading_stream;ExprParser::ExprParser(const std::string& str){  this->failed_ = false;  this->reading_stream = str.c_str();  if (str.size() == 0 || *reading_stream == '\0')  {    this->failed_ = true;    this->result_ = 0.0;  }  else  {    this->result_ = parse_expr_8();    this->remains_ = reading_stream;  }}//Private functions:/******************/double ExprParser::parse_argument(){   double value = parse_expr_8();   if (*reading_stream == ',')   {      ++reading_stream;      return value;   }   else   {     this->failed_ = true;     return 0;   }}double ExprParser::parse_last_argument(){   double value = parse_expr_8();   if (*reading_stream == ')')   {      ++reading_stream;      return value;   }   else   {     this->failed_ = true;     return 0;   }}double ExprParser::parse_expr_8(){   double value = parse_expr_7();   for(;;)   {      switch (op)      {         case oder:            value = parse_expr_7() || value;            break;         default: return value;      }   };}double ExprParser::parse_expr_7(){   double value = parse_expr_6();   for(;;)   {      switch (op)      {         case und:            value = value && parse_expr_6();            break;         default: return value;      }   };}double ExprParser::parse_expr_6(){   double value = parse_expr_5();   for(;;)   {      switch (op)      {         case gleich:            value = (value == parse_expr_5());            break;         case ungleich:            value = (value != parse_expr_5());            break;         default:            return value;      }   };}double ExprParser::parse_expr_5(){   double value = parse_expr_4();   for(;;)   {      switch (op)      {         case kleiner:            value = (value < parse_expr_4());            break;         case kleinergleich:            value = (value <= parse_expr_4());            break;         case groesser:            value = (value > parse_expr_4());            break;         case groessergleich:            value = (value >= parse_expr_4());            break;         default:            return value;      }   };}double ExprParser::parse_expr_4(){   double value = parse_expr_3();   for(;;)   {      switch (op)      {         case b_plus:            value += parse_expr_3();            break;         case b_minus:            value -= parse_expr_3();            break;         default:            return value;      }   };}double ExprParser::parse_expr_3(){   double value = parse_expr_2();   for(;;)   {      switch (op)      {         case mal:            value *= parse_expr_2();            break;         case durch:            value /= parse_expr_2();            break;         case modulo:         {            double temp = parse_expr_2();            value = value - floor(value/temp)*temp;            break;         }         default:            return value;      }   };}double ExprParser::parse_expr_2(){   double value = parse_expr_1();   while (*reading_stream != '\0')   {      op = parse_binary_operator();      switch (op)      {         case hoch:            value = pow(value,parse_expr_1());            break;         default:            return value;      }   };   op = undef;   return value;}double ExprParser::parse_expr_1(){   PARSE_BLANKS   double value;   unary_operator op = parse_unary_operator();   PARSE_BLANKS   if (*reading_stream == '\0')   {     // end of string     this->failed_ = true;     return 0;   }   else if (*reading_stream > 47 && *reading_stream < 59 || *reading_stream == 46)   {  // number      value = strtod(reading_stream, const_cast<char**>(&reading_stream));   }   else if (*reading_stream > 64 && *reading_stream < 91 || *reading_stream > 96 && *reading_stream < 123 || *reading_stream == 46)   {  // variable or function      char* word = new char[256];      parse_word(word);      PARSE_BLANKS      if (*reading_stream == '(')      {         ++reading_stream;#define SWITCH word         CASE_1("sin")            value = sin(parse_last_argument());         CASE("asin")            value = asin(parse_last_argument());         CASE("sinh")            value = sinh(parse_last_argument());         CASE("asinh")         {            value = parse_last_argument();            value = log(sqrt(pow(value, 2) + 1) + value);         }         CASE("cos")            value = cos(parse_last_argument());         CASE("acos")            value = acos(parse_last_argument());         CASE("cosh")            value = cosh(parse_last_argument());         CASE("acosh")         {            value = parse_last_argument();            value = log(sqrt(pow(value, 2) - 1) + value);         }         CASE("tan")            value = tan(parse_last_argument());         CASE("atan")            value = atan(parse_last_argument());         CASE("atan2")            value = atan2(parse_argument(),parse_last_argument());         CASE("tanh")            value = tanh(parse_last_argument());         CASE("atanh")         {            value = parse_last_argument();            value = 0.5*log((value + 1)/(value - 1));         }         CASE("int")            value = floor(parse_last_argument());         CASE("floor")            value = floor(parse_last_argument());         CASE("ceil")            value = ceil(parse_last_argument());         CASE("abs")            value = fabs(parse_last_argument());         CASE("exp")            value = exp(parse_last_argument());         CASE("log")            value = log10(parse_last_argument());         CASE("ln")            value = log(parse_last_argument());         CASE("sign")         {            value = parse_last_argument();            value = (value>0 ? 1 : (value<0 ? -1 : 0));         }         CASE("sqrt")            value = sqrt(parse_last_argument());         CASE("degrees")            value = parse_last_argument()*180/3.1415926535897932;         CASE("radians")            value = parse_last_argument()*3.1415926535897932/180;         CASE("mod")         {            value = parse_argument();            double value2 = parse_last_argument();            value = value - floor(value/value2)*value2;         }         CASE("pow")            value = pow(parse_argument(),parse_last_argument());         CASE("div")            value = floor(parse_argument()/parse_last_argument());         CASE("max")           value = std::max(parse_argument(),parse_last_argument());         CASE("min")           value = std::min(parse_argument(),parse_last_argument());         CASE_ELSE         {           this->failed_ = true;           delete[] word;           return 0;         }      }      else      {#define SWITCH word         CASE_1("pi")           value = 3.1415926535897932;         CASE("e")           value = 2.7182818284590452;         CASE_ELSE         {           this->failed_ = true;           delete[] word;           return 0;         }      }      delete[] word;   }   else if (*reading_stream == 40)   {  // expresion in paranthesis      ++reading_stream;      value = parse_last_argument();   }   else   {     this->failed_ = true;     return 0;   }   PARSE_BLANKS   switch (op)   {      case u_nicht: return !value;      case u_plus:  return  value;      case u_minus: return -value;      default:        {          this->failed_ = true;          return 0;        }   }}char* ExprParser::parse_word(char* str){   char* word = str;   int counter = 0;   while (*reading_stream > 47 && *reading_stream < 58 || *reading_stream > 64 && *reading_stream < 91 || *reading_stream > 96 && *reading_stream < 123 || *reading_stream == 46)   {      *word++ = *reading_stream++;      counter++;      if (counter > 255)      {        this->failed_ = true;        return '\0';      }   };   *word = '\0';   return str;}ExprParser::binary_operator ExprParser::parse_binary_operator(){   binary_operator op;   switch (*reading_stream)   {      case '+': op = b_plus; break;      case '-': op = b_minus; break;      case '*': op = mal; break;      case '/': op = durch; break;      case '^': op = hoch; break;      case '%': op = modulo; break;      case '&': op = und; break;      case '|': op = oder; break;      case '=': op = gleich; break;      case '!': op = b_nicht; break;      case '<': op = kleiner; break;      case '>': op = groesser; break;      default: return undef;   }   if (*++reading_stream == '=')   {      if (op > 9)      {         ++reading_stream;         return (binary_operator)(op + 3);      }      else      {         --reading_stream;         return undef;      }   }   else      return op;}ExprParser::unary_operator ExprParser::parse_unary_operator(){   switch (*reading_stream)   {      case '!':         ++reading_stream;         return u_nicht;      case '+':         ++reading_stream;         return u_plus;      case '-':         ++reading_stream;         return u_minus;      default :         return u_plus;   }}
Index: code/branches/network/src/util/ExprParser.h
===================================================================
--- code/branches/network/src/util/ExprParser.h	(revision 1478)
+++ code/branches/network/src/util/ExprParser.h	(revision 1494)
@@ -1,6 +1,5 @@
 /*
  *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
+ *                    > www.orxonox.net < *
  *
  *   License notice:
@@ -31,77 +30,3 @@
   @brief Declaration of FloatParser
 */
-
-#ifndef _FloatParser_H__
-#define _FloatParser_H__
-
-#include "UtilPrereqs.h"
-#include <string>
-
-class _UtilExport ExprParser
-{
-public:
-  enum binary_operator
-  {
-    b_plus,
-    b_minus,
-    mal,
-    durch,
-    modulo,
-    hoch,
-    undef,
-    oder,
-    und,
-    gleich,
-    b_nicht,
-    kleiner,
-    groesser,
-    ungleich,
-    kleinergleich,
-    groessergleich
-  };
-
-  enum unary_operator
-  {
-    u_plus,
-    u_minus,
-    u_nicht
-  };
-
-
-  ExprParser(const std::string& str);
-  std::string& getRemains() { return  this->remains_; }
-  double       getResult()  { return  this->result_; }
-  bool         getSuccess() { return !this->failed_; }
-
-private:
-  double parse_expr_1();
-  double parse_expr_2();
-  double parse_expr_3();
-  double parse_expr_4();
-  double parse_expr_5();
-  double parse_expr_6();
-  double parse_expr_7();
-  double parse_expr_8();
-  char* parse_word(char* str);
-  binary_operator parse_binary_operator();
-  unary_operator parse_unary_operator();
-
-  double parse_argument();
-  double parse_last_argument();
-
-  binary_operator op;
-  const char* reading_stream;
-  bool failed_;
-  double result_;
-  std::string remains_;
-
-};
-
-//Endzeichen für float expression: ')', '}', ']', ',', ';'
-_UtilExport bool parse_float(char* const, char**, double*);
-//Endzeichen angegeben
-_UtilExport bool parse_float(char* const, char**, char, double*);
-//Letzter Teil-float eines Vektors parsen (keine Vergleichs- und Logikoperationen)
-_UtilExport bool parse_vector_float(char* const, char**, bool, double*);
-
-#endif /* _FloatParser_H__ */
+#ifndef _FloatParser_H__#define _FloatParser_H__#include "UtilPrereqs.h"#include <string>class _UtilExport ExprParser{public:  enum binary_operator  {    b_plus,    b_minus,    mal,    durch,    modulo,    hoch,    undef,    oder,    und,    gleich,    b_nicht,    kleiner,    groesser,    ungleich,    kleinergleich,    groessergleich  };  enum unary_operator  {    u_plus,    u_minus,    u_nicht  };  ExprParser(const std::string& str);  std::string& getRemains() { return  this->remains_; }  double       getResult()  { return  this->result_; }  bool         getSuccess() { return !this->failed_; }private:  double parse_expr_1();  double parse_expr_2();  double parse_expr_3();  double parse_expr_4();  double parse_expr_5();  double parse_expr_6();  double parse_expr_7();  double parse_expr_8();  char* parse_word(char* str);  binary_operator parse_binary_operator();  unary_operator parse_unary_operator();  double parse_argument();  double parse_last_argument();  binary_operator op;  const char* reading_stream;  bool failed_;  double result_;  std::string remains_;};//Endzeichen für float expression: ')', '}', ']', ',', ';'_UtilExport bool parse_float(char* const, char**, double*);//Endzeichen angegeben_UtilExport bool parse_float(char* const, char**, char, double*);//Letzter Teil-float eines Vektors parsen (keine Vergleichs- und Logikoperationen)_UtilExport bool parse_vector_float(char* const, char**, bool, double*);#endif /* _FloatParser_H__ */
Index: code/branches/network/src/util/Math.cc
===================================================================
--- code/branches/network/src/util/Math.cc	(revision 1478)
+++ code/branches/network/src/util/Math.cc	(revision 1494)
Index: code/branches/network/src/util/Math.h
===================================================================
--- code/branches/network/src/util/Math.h	(revision 1478)
+++ code/branches/network/src/util/Math.h	(revision 1494)
Index: code/branches/network/src/util/MultiType.h
===================================================================
--- code/branches/network/src/util/MultiType.h	(revision 1478)
+++ code/branches/network/src/util/MultiType.h	(revision 1494)
Index: code/branches/network/src/util/MultiTypeMath.cc
===================================================================
--- code/branches/network/src/util/MultiTypeMath.cc	(revision 1478)
+++ code/branches/network/src/util/MultiTypeMath.cc	(revision 1494)
Index: code/branches/network/src/util/MultiTypeMath.h
===================================================================
--- code/branches/network/src/util/MultiTypeMath.h	(revision 1478)
+++ code/branches/network/src/util/MultiTypeMath.h	(revision 1494)
@@ -1,194 +1,8 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   License notice:
- *
- *   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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- *   Inspiration: MultiType by Benjamin Grauer
- */
-
-#ifndef _MultiTypeMath_H__
-#define _MultiTypeMath_H__
-
-#include "UtilPrereqs.h"
-
-#include "MultiTypeString.h"
-#include "Math.h"
-
-// disable annoying warning about multiple assignment operators
+/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Fabian 'x3n' Landau *   Co-authors: *      ... * *   Inspiration: MultiType by Benjamin Grauer */#ifndef _MultiTypeMath_H__#define _MultiTypeMath_H__#include "UtilPrereqs.h"#include "MultiTypeString.h"#include "Math.h"// disable annoying warning about multiple assignment operators
 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
 #pragma warning(push)
 #pragma warning(disable:4522)
 #endif
-
-class _UtilExport MultiTypeMath : public MultiTypeString
-{
-    public:
-        MultiTypeMath(MultiType type = MT_null);
-        inline MultiTypeMath(void*          value) : MultiTypeString(value) {}
-        inline MultiTypeMath(int            value) : MultiTypeString(value) {}
-        inline MultiTypeMath(unsigned int   value) : MultiTypeString(value) {}
-        inline MultiTypeMath(char           value) : MultiTypeString(value) {}
-        inline MultiTypeMath(unsigned char  value) : MultiTypeString(value) {}
-        inline MultiTypeMath(short          value) : MultiTypeString(value) {}
-        inline MultiTypeMath(unsigned short value) : MultiTypeString(value) {}
-        inline MultiTypeMath(long           value) : MultiTypeString(value) {}
-        inline MultiTypeMath(unsigned long  value) : MultiTypeString(value) {}
-        inline MultiTypeMath(float          value) : MultiTypeString(value) {}
-        inline MultiTypeMath(double         value) : MultiTypeString(value) {}
-        inline MultiTypeMath(long double    value) : MultiTypeString(value) {}
-        inline MultiTypeMath(bool           value) : MultiTypeString(value) {}
-        inline MultiTypeMath(const char*             value) : MultiTypeString(value) {}
-        inline MultiTypeMath(const std::string&      value) : MultiTypeString(value) {}
-        inline MultiTypeMath(const orxonox::Vector2&     value) { this->setValue(value); }
-        inline MultiTypeMath(const orxonox::Vector3&     value) { this->setValue(value); }
-        inline MultiTypeMath(const orxonox::Vector4&     value) { this->setValue(value); }
-        inline MultiTypeMath(const orxonox::ColourValue& value) { this->setValue(value); }
-        inline MultiTypeMath(const orxonox::Quaternion&  value) { this->setValue(value); }
-        inline MultiTypeMath(const orxonox::Radian&      value) { this->setValue(value); }
-        inline MultiTypeMath(const orxonox::Degree&      value) { this->setValue(value); }
-        inline MultiTypeMath(const MultiTypeMath& mtm)          { this->setValue(mtm);   }
-        inline MultiTypeMath(const MultiTypeString& mts)        { this->setValue(mts);   }
-        inline MultiTypeMath(const MultiTypePrimitive& mtp)     { this->setValue(mtp);   }
-        virtual inline ~MultiTypeMath() {}
-
-        using MultiTypeString::operator=;
-        inline MultiTypeMath& operator=(const orxonox::Vector2&     value) { this->setValue(value); return *this; }
-        inline MultiTypeMath& operator=(const orxonox::Vector3&     value) { this->setValue(value); return *this; }
-        inline MultiTypeMath& operator=(const orxonox::Vector4&     value) { this->setValue(value); return *this; }
-        inline MultiTypeMath& operator=(const orxonox::ColourValue& value) { this->setValue(value); return *this; }
-        inline MultiTypeMath& operator=(const orxonox::Quaternion&  value) { this->setValue(value); return *this; }
-        inline MultiTypeMath& operator=(const orxonox::Radian&      value) { this->setValue(value); return *this; }
-        inline MultiTypeMath& operator=(const orxonox::Degree&      value) { this->setValue(value); return *this; }
-        inline MultiTypeMath& operator=(const MultiTypeMath& mtm)          { this->setValue(mtm);   return *this; }
-        inline MultiTypeMath& operator=(const MultiTypeString& mts)        { this->setValue(mts);   return *this; }
-        inline MultiTypeMath& operator=(const MultiTypePrimitive mtp)      { this->setValue(mtp);   return *this; }
-
-        using MultiTypeString::operator==;
-        inline bool operator==(const orxonox::Vector2&     value) const { return (this->vector2_     == value); }
-        inline bool operator==(const orxonox::Vector3&     value) const { return (this->vector3_     == value); }
-        inline bool operator==(const orxonox::Vector4&     value) const { return (this->vector4_     == value); }
-        inline bool operator==(const orxonox::ColourValue& value) const { return (this->colourvalue_ == value); }
-        inline bool operator==(const orxonox::Quaternion&  value) const { return (this->quaternion_  == value); }
-        inline bool operator==(const orxonox::Radian&      value) const { return (this->radian_      == value); }
-        inline bool operator==(const orxonox::Degree&      value) const { return (this->degree_      == value); }
-        bool operator==(const MultiTypeMath& mtm) const;
-        bool operator==(const MultiTypeString& mts) const;
-        bool operator==(const MultiTypePrimitive& mtp) const;
-
-        using MultiTypeString::operator!=;
-        inline bool operator!=(const orxonox::Vector2&     value) const { return (this->vector2_     != value); }
-        inline bool operator!=(const orxonox::Vector3&     value) const { return (this->vector3_     != value); }
-        inline bool operator!=(const orxonox::Vector4&     value) const { return (this->vector4_     != value); }
-        inline bool operator!=(const orxonox::ColourValue& value) const { return (this->colourvalue_ != value); }
-        inline bool operator!=(const orxonox::Quaternion&  value) const { return (this->quaternion_  != value); }
-        inline bool operator!=(const orxonox::Radian&      value) const { return (this->radian_      != value); }
-        inline bool operator!=(const orxonox::Degree&      value) const { return (this->degree_      != value); }
-        bool operator!=(const MultiTypeMath& mtm) const;
-        bool operator!=(const MultiTypeString& mts) const;
-        bool operator!=(const MultiTypePrimitive& mtp) const;
-
-        virtual operator void*()                const;
-        virtual operator int()                  const;
-        virtual operator unsigned int()         const;
-        virtual operator char()                 const;
-        virtual operator unsigned char()        const;
-        virtual operator short()                const;
-        virtual operator unsigned short()       const;
-        virtual operator long()                 const;
-        virtual operator unsigned long()        const;
-        virtual operator float ()               const;
-        virtual operator double ()              const;
-        virtual operator long double()          const;
-        virtual operator bool()                 const;
-        virtual operator std::string()          const;
-        virtual operator const char*()          const;
-        virtual operator orxonox::Vector2()     const;
-        virtual operator orxonox::Vector3()     const;
-        virtual operator orxonox::Vector4()     const;
-        virtual operator orxonox::ColourValue() const;
-        virtual operator orxonox::Quaternion()  const;
-        virtual operator orxonox::Radian()      const;
-        virtual operator orxonox::Degree()      const;
-
-        using MultiTypeString::setValue;
-        inline void setValue(const orxonox::Vector2&     value) { this->type_ = MT_vector2;     this->vector2_     = value; }
-        inline void setValue(const orxonox::Vector3&     value) { this->type_ = MT_vector3;     this->vector3_     = value; }
-        inline void setValue(const orxonox::Vector4&     value) { this->type_ = MT_vector4;     this->vector4_     = value; }
-        inline void setValue(const orxonox::ColourValue& value) { this->type_ = MT_colourvalue; this->colourvalue_ = value; }
-        inline void setValue(const orxonox::Quaternion&  value) { this->type_ = MT_quaternion;  this->quaternion_  = value; }
-        inline void setValue(const orxonox::Radian&      value) { this->type_ = MT_radian;      this->radian_      = value; }
-        inline void setValue(const orxonox::Degree&      value) { this->type_ = MT_degree;      this->degree_      = value; }
-        void setValue(const MultiTypeMath& mtm);
-        void setValue(const MultiTypeString& mts);
-        void setValue(const MultiTypePrimitive& mtp);
-
-        inline orxonox::Vector2     getVector2()     const { return this->vector2_;     }
-        inline orxonox::Vector3     getVector3()     const { return this->vector3_;     }
-        inline orxonox::Vector4     getVector4()     const { return this->vector4_;     }
-        inline orxonox::ColourValue getColourValue() const { return this->colourvalue_; }
-        inline orxonox::Quaternion  getQuaternion()  const { return this->quaternion_;  }
-        inline orxonox::Radian      getRadian()      const { return this->radian_;      }
-        inline orxonox::Degree      getDegree()      const { return this->degree_;      }
-
-        inline orxonox::Vector2&     getVector2()     { return this->vector2_;     }
-        inline orxonox::Vector3&     getVector3()     { return this->vector3_;     }
-        inline orxonox::Vector4&     getVector4()     { return this->vector4_;     }
-        inline orxonox::ColourValue& getColourValue() { return this->colourvalue_; }
-        inline orxonox::Quaternion&  getQuaternion()  { return this->quaternion_;  }
-        inline orxonox::Radian&      getRadian()      { return this->radian_;      }
-        inline orxonox::Degree&      getDegree()      { return this->degree_;      }
-
-        using MultiTypeString::getValue;
-        inline void getValue(orxonox::Vector2*     variable) const { (*variable) = orxonox::Vector2     (this->vector2_);     }
-        inline void getValue(orxonox::Vector3*     variable) const { (*variable) = orxonox::Vector3     (this->vector3_);     }
-        inline void getValue(orxonox::Vector4*     variable) const { (*variable) = orxonox::Vector4     (this->vector4_);     }
-        inline void getValue(orxonox::ColourValue* variable) const { (*variable) = orxonox::ColourValue (this->colourvalue_); }
-        inline void getValue(orxonox::Quaternion*  variable) const { (*variable) = orxonox::Quaternion  (this->quaternion_);  }
-        inline void getValue(orxonox::Radian*      variable) const { (*variable) = orxonox::Radian      (this->radian_);      }
-        inline void getValue(orxonox::Degree*      variable) const { (*variable) = orxonox::Degree      (this->degree_);      }
-
-        virtual std::string getTypename() const;
-
-        virtual std::string toString() const;
-        virtual bool fromString(const std::string value);
-
-        virtual bool assimilate(const MultiTypeMath& mtm, const MultiTypeMath& defvalue = MultiTypeMath());
-
-    protected:
-        orxonox::Vector2      vector2_;
-        orxonox::Vector3      vector3_;
-        orxonox::Vector4      vector4_;
-        orxonox::ColourValue  colourvalue_;
-        orxonox::Quaternion   quaternion_;
-        orxonox::Radian       radian_;
-        orxonox::Degree       degree_;
-};
-
-_UtilExport std::ostream& operator<<(std::ostream& out, MultiTypeMath& mtm);
-
-#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
+class _UtilExport MultiTypeMath : public MultiTypeString{    public:        MultiTypeMath(MultiType type = MT_null);        inline MultiTypeMath(void*          value) : MultiTypeString(value) {}        inline MultiTypeMath(int            value) : MultiTypeString(value) {}        inline MultiTypeMath(unsigned int   value) : MultiTypeString(value) {}        inline MultiTypeMath(char           value) : MultiTypeString(value) {}        inline MultiTypeMath(unsigned char  value) : MultiTypeString(value) {}        inline MultiTypeMath(short          value) : MultiTypeString(value) {}        inline MultiTypeMath(unsigned short value) : MultiTypeString(value) {}        inline MultiTypeMath(long           value) : MultiTypeString(value) {}        inline MultiTypeMath(unsigned long  value) : MultiTypeString(value) {}        inline MultiTypeMath(float          value) : MultiTypeString(value) {}        inline MultiTypeMath(double         value) : MultiTypeString(value) {}        inline MultiTypeMath(long double    value) : MultiTypeString(value) {}        inline MultiTypeMath(bool           value) : MultiTypeString(value) {}        inline MultiTypeMath(const char*             value) : MultiTypeString(value) {}        inline MultiTypeMath(const std::string&      value) : MultiTypeString(value) {}        inline MultiTypeMath(const orxonox::Vector2&     value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Vector3&     value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Vector4&     value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::ColourValue& value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Quaternion&  value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Radian&      value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Degree&      value) { this->setValue(value); }        inline MultiTypeMath(const MultiTypeMath& mtm)          { this->setValue(mtm);   }        inline MultiTypeMath(const MultiTypeString& mts)        { this->setValue(mts);   }        inline MultiTypeMath(const MultiTypePrimitive& mtp)     { this->setValue(mtp);   }        virtual inline ~MultiTypeMath() {}        using MultiTypeString::operator=;        inline MultiTypeMath& operator=(const orxonox::Vector2&     value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Vector3&     value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Vector4&     value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::ColourValue& value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Quaternion&  value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Radian&      value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Degree&      value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const MultiTypeMath& mtm)          { this->setValue(mtm);   return *this; }        inline MultiTypeMath& operator=(const MultiTypeString& mts)        { this->setValue(mts);   return *this; }        inline MultiTypeMath& operator=(const MultiTypePrimitive mtp)      { this->setValue(mtp);   return *this; }        using MultiTypeString::operator==;        inline bool operator==(const orxonox::Vector2&     value) const { return (this->vector2_     == value); }        inline bool operator==(const orxonox::Vector3&     value) const { return (this->vector3_     == value); }        inline bool operator==(const orxonox::Vector4&     value) const { return (this->vector4_     == value); }        inline bool operator==(const orxonox::ColourValue& value) const { return (this->colourvalue_ == value); }        inline bool operator==(const orxonox::Quaternion&  value) const { return (this->quaternion_  == value); }        inline bool operator==(const orxonox::Radian&      value) const { return (this->radian_      == value); }        inline bool operator==(const orxonox::Degree&      value) const { return (this->degree_      == value); }        bool operator==(const MultiTypeMath& mtm) const;        bool operator==(const MultiTypeString& mts) const;        bool operator==(const MultiTypePrimitive& mtp) const;        using MultiTypeString::operator!=;        inline bool operator!=(const orxonox::Vector2&     value) const { return (this->vector2_     != value); }        inline bool operator!=(const orxonox::Vector3&     value) const { return (this->vector3_     != value); }        inline bool operator!=(const orxonox::Vector4&     value) const { return (this->vector4_     != value); }        inline bool operator!=(const orxonox::ColourValue& value) const { return (this->colourvalue_ != value); }        inline bool operator!=(const orxonox::Quaternion&  value) const { return (this->quaternion_  != value); }        inline bool operator!=(const orxonox::Radian&      value) const { return (this->radian_      != value); }        inline bool operator!=(const orxonox::Degree&      value) const { return (this->degree_      != value); }        bool operator!=(const MultiTypeMath& mtm) const;        bool operator!=(const MultiTypeString& mts) const;        bool operator!=(const MultiTypePrimitive& mtp) const;        virtual operator void*()                const;        virtual operator int()                  const;        virtual operator unsigned int()         const;        virtual operator char()                 const;        virtual operator unsigned char()        const;        virtual operator short()                const;        virtual operator unsigned short()       const;        virtual operator long()                 const;        virtual operator unsigned long()        const;        virtual operator float ()               const;        virtual operator double ()              const;        virtual operator long double()          const;        virtual operator bool()                 const;        virtual operator std::string()          const;        virtual operator const char*()          const;        virtual operator orxonox::Vector2()     const;        virtual operator orxonox::Vector3()     const;        virtual operator orxonox::Vector4()     const;        virtual operator orxonox::ColourValue() const;        virtual operator orxonox::Quaternion()  const;        virtual operator orxonox::Radian()      const;        virtual operator orxonox::Degree()      const;        using MultiTypeString::setValue;        inline void setValue(const orxonox::Vector2&     value) { this->type_ = MT_vector2;     this->vector2_     = value; }        inline void setValue(const orxonox::Vector3&     value) { this->type_ = MT_vector3;     this->vector3_     = value; }        inline void setValue(const orxonox::Vector4&     value) { this->type_ = MT_vector4;     this->vector4_     = value; }        inline void setValue(const orxonox::ColourValue& value) { this->type_ = MT_colourvalue; this->colourvalue_ = value; }        inline void setValue(const orxonox::Quaternion&  value) { this->type_ = MT_quaternion;  this->quaternion_  = value; }        inline void setValue(const orxonox::Radian&      value) { this->type_ = MT_radian;      this->radian_      = value; }        inline void setValue(const orxonox::Degree&      value) { this->type_ = MT_degree;      this->degree_      = value; }        void setValue(const MultiTypeMath& mtm);        void setValue(const MultiTypeString& mts);        void setValue(const MultiTypePrimitive& mtp);        inline orxonox::Vector2     getVector2()     const { return this->vector2_;     }        inline orxonox::Vector3     getVector3()     const { return this->vector3_;     }        inline orxonox::Vector4     getVector4()     const { return this->vector4_;     }        inline orxonox::ColourValue getColourValue() const { return this->colourvalue_; }        inline orxonox::Quaternion  getQuaternion()  const { return this->quaternion_;  }        inline orxonox::Radian      getRadian()      const { return this->radian_;      }        inline orxonox::Degree      getDegree()      const { return this->degree_;      }        inline orxonox::Vector2&     getVector2()     { return this->vector2_;     }        inline orxonox::Vector3&     getVector3()     { return this->vector3_;     }        inline orxonox::Vector4&     getVector4()     { return this->vector4_;     }        inline orxonox::ColourValue& getColourValue() { return this->colourvalue_; }        inline orxonox::Quaternion&  getQuaternion()  { return this->quaternion_;  }        inline orxonox::Radian&      getRadian()      { return this->radian_;      }        inline orxonox::Degree&      getDegree()      { return this->degree_;      }        using MultiTypeString::getValue;        inline void getValue(orxonox::Vector2*     variable) const { (*variable) = orxonox::Vector2     (this->vector2_);     }        inline void getValue(orxonox::Vector3*     variable) const { (*variable) = orxonox::Vector3     (this->vector3_);     }        inline void getValue(orxonox::Vector4*     variable) const { (*variable) = orxonox::Vector4     (this->vector4_);     }        inline void getValue(orxonox::ColourValue* variable) const { (*variable) = orxonox::ColourValue (this->colourvalue_); }        inline void getValue(orxonox::Quaternion*  variable) const { (*variable) = orxonox::Quaternion  (this->quaternion_);  }        inline void getValue(orxonox::Radian*      variable) const { (*variable) = orxonox::Radian      (this->radian_);      }        inline void getValue(orxonox::Degree*      variable) const { (*variable) = orxonox::Degree      (this->degree_);      }        virtual std::string getTypename() const;        virtual std::string toString() const;        virtual bool fromString(const std::string value);        virtual bool assimilate(const MultiTypeMath& mtm, const MultiTypeMath& defvalue = MultiTypeMath());    protected:        orxonox::Vector2      vector2_;        orxonox::Vector3      vector3_;        orxonox::Vector4      vector4_;        orxonox::ColourValue  colourvalue_;        orxonox::Quaternion   quaternion_;        orxonox::Radian       radian_;        orxonox::Degree       degree_;};_UtilExport std::ostream& operator<<(std::ostream& out, MultiTypeMath& mtm);#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
 #pragma warning(pop)
-#endif
-
-#endif /* _MultiTypeMath_H__ */
+#endif#endif /* _MultiTypeMath_H__ */
Index: code/branches/network/src/util/MultiTypePrimitive.cc
===================================================================
--- code/branches/network/src/util/MultiTypePrimitive.cc	(revision 1478)
+++ code/branches/network/src/util/MultiTypePrimitive.cc	(revision 1494)
Index: code/branches/network/src/util/MultiTypePrimitive.h
===================================================================
--- code/branches/network/src/util/MultiTypePrimitive.h	(revision 1478)
+++ code/branches/network/src/util/MultiTypePrimitive.h	(revision 1494)
Index: code/branches/network/src/util/MultiTypeString.cc
===================================================================
--- code/branches/network/src/util/MultiTypeString.cc	(revision 1478)
+++ code/branches/network/src/util/MultiTypeString.cc	(revision 1494)
Index: code/branches/network/src/util/MultiTypeString.h
===================================================================
--- code/branches/network/src/util/MultiTypeString.h	(revision 1478)
+++ code/branches/network/src/util/MultiTypeString.h	(revision 1494)
@@ -1,136 +1,8 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   License notice:
- *
- *   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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- *   Inspiration: MultiType by Benjamin Grauer
- */
-
-#ifndef _MultiTypeString_H__
-#define _MultiTypeString_H__
-
-#include "UtilPrereqs.h"
-
-#include <string>
-#include <iostream>
-
-#include "MultiTypePrimitive.h"
-
-// disable annoying warning about multiple assignment operators
+/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Fabian 'x3n' Landau *   Co-authors: *      ... * *   Inspiration: MultiType by Benjamin Grauer */#ifndef _MultiTypeString_H__#define _MultiTypeString_H__#include "UtilPrereqs.h"#include <string>#include <iostream>#include "MultiTypePrimitive.h"// disable annoying warning about multiple assignment operators
 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
 #pragma warning(push)
 #pragma warning(disable:4522)
 #endif
-
-class _UtilExport MultiTypeString : public MultiTypePrimitive
-{
-    public:
-        MultiTypeString(MultiType type = MT_null);
-        inline MultiTypeString(void*          value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(int            value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(unsigned int   value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(char           value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(unsigned char  value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(short          value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(unsigned short value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(long           value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(unsigned long  value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(float          value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(double         value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(long double    value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(bool           value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(const char*             value) { this->setValue(value); }
-        inline MultiTypeString(const std::string&      value) { this->setValue(value); }
-        inline MultiTypeString(const MultiTypeString&    mts)  { this->setValue(mts);   }
-        inline MultiTypeString(const MultiTypePrimitive& mtp)  { this->setValue(mtp);   }
-        virtual inline ~MultiTypeString() {}
-
-        using MultiTypePrimitive::operator=;
-        inline MultiTypeString& operator=(const char*             value) { this->setValue(value); return *this; }
-        inline MultiTypeString& operator=(const std::string&      value) { this->setValue(value); return *this; }
-        inline MultiTypeString& operator=(const MultiTypeString&    mts) { this->setValue(mts);   return *this; }
-        inline MultiTypeString& operator=(const MultiTypePrimitive& mtp) { this->setValue(mtp);   return *this; }
-
-        using MultiTypePrimitive::operator==;
-        inline bool operator==(const char*        value) const { return (this->string_ == std::string(value)); }
-        inline bool operator==(const std::string& value) const { return (this->string_ == value);              }
-        bool operator==(const MultiTypeString&    mts) const;
-        bool operator==(const MultiTypePrimitive& mtp) const;
-
-        using MultiTypePrimitive::operator!=;
-        inline bool operator!=(const char*        value) const { return (this->string_ != std::string(value)); }
-        inline bool operator!=(const std::string& value) const { return (this->string_ != value);              }
-        bool operator!=(const MultiTypeString&    mts) const;
-        bool operator!=(const MultiTypePrimitive& mtp) const;
-
-        virtual operator void*()          const;
-        virtual operator int()            const;
-        virtual operator unsigned int()   const;
-        virtual operator char()           const;
-        virtual operator unsigned char()  const;
-        virtual operator short()          const;
-        virtual operator unsigned short() const;
-        virtual operator long()           const;
-        virtual operator unsigned long()  const;
-        virtual operator float ()         const;
-        virtual operator double ()        const;
-        virtual operator long double()    const;
-        virtual operator bool()           const;
-        virtual operator std::string()    const;
-        virtual operator const char*()    const;
-
-        using MultiTypePrimitive::setValue;
-        inline void setValue(const char*        value) { this->type_ = MT_string; this->string_ = std::string(value); }
-        inline void setValue(const std::string& value) { this->type_ = MT_string; this->string_ = value;              }
-        void setValue(const MultiTypeString&    mts);
-        void setValue(const MultiTypePrimitive& mtp);
-
-        inline std::string getString()     const { return this->string_;         }
-        inline const char*  getConstChar() const { return this->string_.c_str(); }
-
-        inline std::string& getString()    { return this->string_;         }
-        inline const char*  getConstChar() { return this->string_.c_str(); }
-
-        using MultiTypePrimitive::getValue;
-        inline void getValue(std::string* variable) const { (*variable) = this->string_;         }
-        inline void getValue(const char** variable) const { (*variable) = this->string_.c_str(); }
-
-        virtual std::string getTypename() const;
-
-        virtual std::string toString() const;
-        virtual bool fromString(const std::string value);
-
-        virtual bool assimilate(const MultiTypeString& mts, const MultiTypeString& defvalue = MultiTypeString());
-
-    protected:
-        std::string      string_;
-};
-
-_UtilExport std::ostream& operator<<(std::ostream& out, MultiTypeString& mts);
-
-#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
+class _UtilExport MultiTypeString : public MultiTypePrimitive{    public:        MultiTypeString(MultiType type = MT_null);        inline MultiTypeString(void*          value) : MultiTypePrimitive(value) {}        inline MultiTypeString(int            value) : MultiTypePrimitive(value) {}        inline MultiTypeString(unsigned int   value) : MultiTypePrimitive(value) {}        inline MultiTypeString(char           value) : MultiTypePrimitive(value) {}        inline MultiTypeString(unsigned char  value) : MultiTypePrimitive(value) {}        inline MultiTypeString(short          value) : MultiTypePrimitive(value) {}        inline MultiTypeString(unsigned short value) : MultiTypePrimitive(value) {}        inline MultiTypeString(long           value) : MultiTypePrimitive(value) {}        inline MultiTypeString(unsigned long  value) : MultiTypePrimitive(value) {}        inline MultiTypeString(float          value) : MultiTypePrimitive(value) {}        inline MultiTypeString(double         value) : MultiTypePrimitive(value) {}        inline MultiTypeString(long double    value) : MultiTypePrimitive(value) {}        inline MultiTypeString(bool           value) : MultiTypePrimitive(value) {}        inline MultiTypeString(const char*             value) { this->setValue(value); }        inline MultiTypeString(const std::string&      value) { this->setValue(value); }        inline MultiTypeString(const MultiTypeString&    mts)  { this->setValue(mts);   }        inline MultiTypeString(const MultiTypePrimitive& mtp)  { this->setValue(mtp);   }        virtual inline ~MultiTypeString() {}        using MultiTypePrimitive::operator=;        inline MultiTypeString& operator=(const char*             value) { this->setValue(value); return *this; }        inline MultiTypeString& operator=(const std::string&      value) { this->setValue(value); return *this; }        inline MultiTypeString& operator=(const MultiTypeString&    mts) { this->setValue(mts);   return *this; }        inline MultiTypeString& operator=(const MultiTypePrimitive& mtp) { this->setValue(mtp);   return *this; }        using MultiTypePrimitive::operator==;        inline bool operator==(const char*        value) const { return (this->string_ == std::string(value)); }        inline bool operator==(const std::string& value) const { return (this->string_ == value);              }        bool operator==(const MultiTypeString&    mts) const;        bool operator==(const MultiTypePrimitive& mtp) const;        using MultiTypePrimitive::operator!=;        inline bool operator!=(const char*        value) const { return (this->string_ != std::string(value)); }        inline bool operator!=(const std::string& value) const { return (this->string_ != value);              }        bool operator!=(const MultiTypeString&    mts) const;        bool operator!=(const MultiTypePrimitive& mtp) const;        virtual operator void*()          const;        virtual operator int()            const;        virtual operator unsigned int()   const;        virtual operator char()           const;        virtual operator unsigned char()  const;        virtual operator short()          const;        virtual operator unsigned short() const;        virtual operator long()           const;        virtual operator unsigned long()  const;        virtual operator float ()         const;        virtual operator double ()        const;        virtual operator long double()    const;        virtual operator bool()           const;        virtual operator std::string()    const;        virtual operator const char*()    const;        using MultiTypePrimitive::setValue;        inline void setValue(const char*        value) { this->type_ = MT_string; this->string_ = std::string(value); }        inline void setValue(const std::string& value) { this->type_ = MT_string; this->string_ = value;              }        void setValue(const MultiTypeString&    mts);        void setValue(const MultiTypePrimitive& mtp);        inline std::string getString()     const { return this->string_;         }        inline const char*  getConstChar() const { return this->string_.c_str(); }        inline std::string& getString()    { return this->string_;         }        inline const char*  getConstChar() { return this->string_.c_str(); }        using MultiTypePrimitive::getValue;        inline void getValue(std::string* variable) const { (*variable) = this->string_;         }        inline void getValue(const char** variable) const { (*variable) = this->string_.c_str(); }        virtual std::string getTypename() const;        virtual std::string toString() const;        virtual bool fromString(const std::string value);        virtual bool assimilate(const MultiTypeString& mts, const MultiTypeString& defvalue = MultiTypeString());    protected:        std::string      string_;};_UtilExport std::ostream& operator<<(std::ostream& out, MultiTypeString& mts);#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
 #pragma warning(pop)
-#endif
-
-#endif /* _MultiTypeString_H__ */
+#endif#endif /* _MultiTypeString_H__ */
Index: code/branches/network/src/util/OrxonoxPlatform.h
===================================================================
--- code/branches/network/src/util/OrxonoxPlatform.h	(revision 1478)
+++ code/branches/network/src/util/OrxonoxPlatform.h	(revision 1494)
@@ -1,6 +1,5 @@
 /*
  *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
+ *                    > www.orxonox.net < *
  *
  *   License notice:
@@ -26,5 +25,4 @@
  *
  */
-
 /**
  @file
@@ -32,167 +30,8 @@
         copy of the file found in the Ogre source code (OgrePlatform.h).
  */
-
-#ifndef _OrxonoxPlatform_H__
-#define _OrxonoxPlatform_H__
-
-/* Initial platform/compiler-related stuff to set.
-*/
-#define ORXONOX_PLATFORM_WIN32 1
-#define ORXONOX_PLATFORM_LINUX 2
-#define ORXONOX_PLATFORM_APPLE 3
-
-#define ORXONOX_COMPILER_MSVC 1
-#define ORXONOX_COMPILER_GNUC 2
-#define ORXONOX_COMPILER_BORL 3
-
-#define ORXONOX_ENDIAN_LITTLE 1
-#define ORXONOX_ENDIAN_BIG 2
-
-#define ORXONOX_ARCHITECTURE_32 1
-#define ORXONOX_ARCHITECTURE_64 2
-
-/* Finds the compiler type and version.
-*/
-#if defined( _MSC_VER )
-#  define ORXONOX_COMPILER ORXONOX_COMPILER_MSVC
-#  define ORXONOX_COMP_VER _MSC_VER
-
-#elif defined( __GNUC__ )
-#  define ORXONOX_COMPILER ORXONOX_COMPILER_GNUC
-#  define ORXONOX_COMP_VER (((__GNUC__)*100) + \
-        (__GNUC_MINOR__*10) + \
-        __GNUC_PATCHLEVEL__)
-
-#elif defined( __BORLANDC__ )
-#  define ORXONOX_COMPILER ORXONOX_COMPILER_BORL
-#  define ORXONOX_COMP_VER __BCPLUSPLUS__
-
-#else
-#  pragma error "No known compiler. Abort! Abort!"
-
-#endif
-
-/* See if we can use __forceinline or if we need to use __inline instead */
-#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
-#  if ORXONOX_COMP_VER >= 1200
-#    define FORCEINLINE __forceinline
-#  endif
-#elif defined(__MINGW32__)
-#  if !defined(FORCEINLINE)
-#    define FORCEINLINE __inline
-#  endif
-#else
-#  define FORCEINLINE __inline
-#endif
-
-/* Finds the current platform */
-
-#if defined( __WIN32__ ) || defined( _WIN32 )
-#  define ORXONOX_PLATFORM ORXONOX_PLATFORM_WIN32
-
-#elif defined( __APPLE_CC__)
-#  define ORXONOX_PLATFORM ORXONOX_PLATFORM_APPLE
-
-#else
-#  define ORXONOX_PLATFORM ORXONOX_PLATFORM_LINUX
-#endif
-
-    /* Find the arch type */
-#if defined(__x86_64__) || defined(_M_X64) || defined(__powerpc64__) || defined(__alpha__) || defined(__ia64__) || defined(__s390__) || defined(__s390x__)
-#  define ORXONOX_ARCH_TYPE ORXONOX_ARCHITECTURE_64
-#else
-#  define ORXONOX_ARCH_TYPE ORXONOX_ARCHITECTURE_32
-#endif
-
-// For generating compiler warnings - should work on any compiler
-// As a side note, if you start your message with 'Warning: ', the MSVC
-// IDE actually does catch a warning :)
-// FIXME: Try this on linux box. Doesn't work with msvc
-//#define ORXONOX_QUOTE_INPLACE(x) # x
-//#define ORXONOX_QUOTE(x) ORXONOX_QUOTE_INPLACE(x)
-//#define ORXONOX_WARN( x )  message( __FILE__ "(" QUOTE( __LINE__ ) ") : " x "\n" )
-
-//----------------------------------------------------------------------------
-// Windows Settings
-#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32
-
-// Win32 compilers use _DEBUG for specifying debug builds.
-#  ifdef _DEBUG
-#    define ORXONOX_DEBUG_MODE 1
-#  else
-#    define ORXONOX_DEBUG_MODE 0
-#  endif
-
-// Disable unicode support on MingW at the moment, poorly supported in stdlibc++
-// STLPORT fixes this though so allow if found
-// MinGW C++ Toolkit supports unicode and sets the define __MINGW32_TOOLKIT_UNICODE__ in _mingw.h
-#  if defined( __MINGW32__ ) && !defined(_STLPORT_VERSION)
-#    include<_mingw.h>
-#    if defined(__MINGW32_TOOLBOX_UNICODE__)
-#      define ORXONOX_UNICODE_SUPPORT 1
-#    else
-#      define ORXONOX_UNICODE_SUPPORT 0
-#    endif
-#  else
-#    define ORXONOX_UNICODE_SUPPORT 1
-#  endif
-
-#endif /* Platform Win32 */
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// Linux/Apple Settings
-#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_LINUX || ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE
-
-
-// A quick define to overcome different names for the same function
-#  define stricmp strcasecmp
-
-// Unlike the Win32 compilers, Linux compilers seem to use DEBUG for when
-// specifying a debug build.
-// (??? this is wrong, on Linux debug builds aren't marked in any way unless
-// you mark it yourself any way you like it -- zap ???)
-#  ifdef DEBUG
-#    define ORXONOX_DEBUG_MODE 1
-#  else
-#    define ORXONOX_DEBUG_MODE 0
-#  endif
-
-/* FIXME: Check what this actually is and whether we need it or not
-#  if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE
-#    define ORXONOX_PLATFORM_LIB "OrxonoxPlatform.bundle"
-#  else
-// ORXONOX_PLATFORM_LINUX
-#    define ORXONOX_PLATFORM_LIB "libOrxonoxPlatform.so"
-#  endif
-*/
-
-// Always enable unicode support for the moment
-// Perhaps disable in old versions of gcc if necessary
-#  define ORXONOX_UNICODE_SUPPORT 1
-
-#endif /* Patform Linux/Apple */
-
-//For apple, we always have a custom config.h file
-#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE
-#  include "config.h"
-#endif
-
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// Endian Settings
-// check for BIG_ENDIAN config flag, set ORXONOX_ENDIAN correctly
-#ifdef ORXONOX_CONFIG_BIG_ENDIAN
-#  define ORXONOX_ENDIAN ORXONOX_ENDIAN_BIG
-#else
-#  define ORXONOX_ENDIAN ORXONOX_ENDIAN_LITTLE
-#endif
-
-//-----------------------------------------------------------------------
+#ifndef _OrxonoxPlatform_H__#define _OrxonoxPlatform_H__/* Initial platform/compiler-related stuff to set.*/#define ORXONOX_PLATFORM_WIN32 1#define ORXONOX_PLATFORM_LINUX 2#define ORXONOX_PLATFORM_APPLE 3#define ORXONOX_COMPILER_MSVC 1#define ORXONOX_COMPILER_GNUC 2#define ORXONOX_COMPILER_BORL 3#define ORXONOX_ENDIAN_LITTLE 1#define ORXONOX_ENDIAN_BIG 2#define ORXONOX_ARCHITECTURE_32 1#define ORXONOX_ARCHITECTURE_64 2/* Finds the compiler type and version.*/#if defined( _MSC_VER )#  define ORXONOX_COMPILER ORXONOX_COMPILER_MSVC#  define ORXONOX_COMP_VER _MSC_VER#elif defined( __GNUC__ )#  define ORXONOX_COMPILER ORXONOX_COMPILER_GNUC#  define ORXONOX_COMP_VER (((__GNUC__)*100) + \        (__GNUC_MINOR__*10) + \        __GNUC_PATCHLEVEL__)#elif defined( __BORLANDC__ )#  define ORXONOX_COMPILER ORXONOX_COMPILER_BORL#  define ORXONOX_COMP_VER __BCPLUSPLUS__#else#  pragma error "No known compiler. Abort! Abort!"#endif/* See if we can use __forceinline or if we need to use __inline instead */#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC#  if ORXONOX_COMP_VER >= 1200#    define FORCEINLINE __forceinline#  endif#elif defined(__MINGW32__)#  if !defined(FORCEINLINE)#    define FORCEINLINE __inline#  endif#else#  define FORCEINLINE __inline#endif/* Finds the current platform */#if defined( __WIN32__ ) || defined( _WIN32 )#  define ORXONOX_PLATFORM ORXONOX_PLATFORM_WIN32#elif defined( __APPLE_CC__)#  define ORXONOX_PLATFORM ORXONOX_PLATFORM_APPLE#else#  define ORXONOX_PLATFORM ORXONOX_PLATFORM_LINUX#endif    /* Find the arch type */#if defined(__x86_64__) || defined(_M_X64) || defined(__powerpc64__) || defined(__alpha__) || defined(__ia64__) || defined(__s390__) || defined(__s390x__)#  define ORXONOX_ARCH_TYPE ORXONOX_ARCHITECTURE_64#else#  define ORXONOX_ARCH_TYPE ORXONOX_ARCHITECTURE_32#endif// For generating compiler warnings - should work on any compiler// As a side note, if you start your message with 'Warning: ', the MSVC// IDE actually does catch a warning :)// FIXME: Try this on linux box. Doesn't work with msvc//#define ORXONOX_QUOTE_INPLACE(x) # x//#define ORXONOX_QUOTE(x) ORXONOX_QUOTE_INPLACE(x)//#define ORXONOX_WARN( x )  message( __FILE__ "(" QUOTE( __LINE__ ) ") : " x "\n" )//----------------------------------------------------------------------------// Windows Settings#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32// Win32 compilers use _DEBUG for specifying debug builds.#  ifdef _DEBUG#    define ORXONOX_DEBUG_MODE 1#  else#    define ORXONOX_DEBUG_MODE 0#  endif// Disable unicode support on MingW at the moment, poorly supported in stdlibc++// STLPORT fixes this though so allow if found// MinGW C++ Toolkit supports unicode and sets the define __MINGW32_TOOLKIT_UNICODE__ in _mingw.h#  if defined( __MINGW32__ ) && !defined(_STLPORT_VERSION)#    include<_mingw.h>#    if defined(__MINGW32_TOOLBOX_UNICODE__)#      define ORXONOX_UNICODE_SUPPORT 1#    else#      define ORXONOX_UNICODE_SUPPORT 0#    endif#  else#    define ORXONOX_UNICODE_SUPPORT 1#  endif#endif /* Platform Win32 *///----------------------------------------------------------------------------//----------------------------------------------------------------------------// Linux/Apple Settings#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_LINUX || ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE// A quick define to overcome different names for the same function#  define stricmp strcasecmp// Unlike the Win32 compilers, Linux compilers seem to use DEBUG for when// specifying a debug build.// (??? this is wrong, on Linux debug builds aren't marked in any way unless// you mark it yourself any way you like it -- zap ???)#  ifdef DEBUG#    define ORXONOX_DEBUG_MODE 1#  else#    define ORXONOX_DEBUG_MODE 0#  endif/* FIXME: Check what this actually is and whether we need it or not#  if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE#    define ORXONOX_PLATFORM_LIB "OrxonoxPlatform.bundle"#  else// ORXONOX_PLATFORM_LINUX#    define ORXONOX_PLATFORM_LIB "libOrxonoxPlatform.so"#  endif*/// Always enable unicode support for the moment// Perhaps disable in old versions of gcc if necessary#  define ORXONOX_UNICODE_SUPPORT 1#endif /* Patform Linux/Apple *///For apple, we always have a custom config.h file#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE#  include "config.h"#endif//----------------------------------------------------------------------------//----------------------------------------------------------------------------// Endian Settings// check for BIG_ENDIAN config flag, set ORXONOX_ENDIAN correctly#ifdef ORXONOX_CONFIG_BIG_ENDIAN#  define ORXONOX_ENDIAN ORXONOX_ENDIAN_BIG#else#  define ORXONOX_ENDIAN ORXONOX_ENDIAN_LITTLE#endif//-----------------------------------------------------------------------
 // fixed width integers
 //-----------------------------------------------------------------------
-#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
-typedef __int8            int8_t;
+#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVCtypedef __int8            int8_t;
 typedef __int16           int16_t;
 typedef __int32           int32_t;
@@ -202,81 +41,3 @@
 typedef unsigned __int32  uint32_t;
 typedef unsigned __int64  uint64_t;
-#else
-# include "inttypes.h"
-#endif
-
-namespace orxonox {
-#ifdef ORXONOX_DOUBLE_PRECISION
-typedef double Real;
-#else
-typedef float Real;
-#endif
-}
-
-
-#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
-// Turn off warnings generated by long std templates
-// This warns about truncation to 255 characters in debug/browse info
-//#   pragma warning (disable : 4786)
-
-// Turn off warnings generated by long std templates
-// This warns about truncation to 255 characters in debug/browse info
-//#   pragma warning (disable : 4503)
-
-// disable: conversion from 'double' to 'float', possible loss of data
-// disable: conversion from 'ogg_int64_t' to 'long', possible loss of data
-// This has been dealt with in base_properties of the solution since the
-// warning primarily occurs in library header files (which are mostly
-// included before OrxonoxPlatform.h is)
-//#   pragma warning (disable : 4244)
-
-// disable: "conversion from 'size_t' to 'unsigned int', possible loss of data
-//#   pragma warning (disable : 4267)
-
-// disable: "truncation from 'double' to 'float'
-//#   pragma warning (disable : 4305)
-
-// set to level 4: "<type> needs to have dll-interface to be used by clients'
-// Happens on STL member variables which are not public therefore is ok
-#   pragma warning (disable : 4251)
-
-// disable: 'MultiTypeString' : multiple assignment operators specified
-// Used in MultiType and works fine so far
-//#   pragma warning (disable : 4522)
-
-// disable: "non dll-interface class used as base for dll-interface class"
-// Happens when deriving from Singleton because bug in compiler ignores
-// template export
-//#   pragma warning (disable : 4275)
-
-// disable: "C++ Exception Specification ignored"
-// This is because MSVC 6 did not implement all the C++ exception
-// specifications in the ANSI C++ draft.
-//#   pragma warning( disable : 4290 )
-
-// disable: "no suitable definition provided for explicit template
-// instantiation request" Occurs in VC7 for no justifiable reason on all
-// #includes of Singleton
-//#   pragma warning( disable: 4661)
-
-// disable: deprecation warnings when using CRT calls in VC8
-// These show up on all C runtime lib code in VC8, disable since they clutter
-// the warnings with things we may not be able to do anything about (e.g.
-// generated code from nvparse etc). I doubt very much that these calls
-// will ever be actually removed from VC anyway, it would break too much code.
-//#	pragma warning( disable: 4996)
-
-// disable: "conditional expression constant", always occurs on
-// ORXONOX_MUTEX_CONDITIONAL when no threading enabled
-//#   pragma warning (disable : 201)
-
-
-// Define the english written operators like and, or, xor
-#include <iso646.h>
-
-#endif /* ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC */
-
-// include visual leak detector to search for memory leaks
-//#include <vld.h>
-
-#endif /* _OrxonoxPlatform_H__ */
+#else# include "inttypes.h"#endifnamespace orxonox {#ifdef ORXONOX_DOUBLE_PRECISIONtypedef double Real;#elsetypedef float Real;#endif}#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC// Turn off warnings generated by long std templates// This warns about truncation to 255 characters in debug/browse info//#   pragma warning (disable : 4786)// Turn off warnings generated by long std templates// This warns about truncation to 255 characters in debug/browse info//#   pragma warning (disable : 4503)// disable: conversion from 'double' to 'float', possible loss of data// disable: conversion from 'ogg_int64_t' to 'long', possible loss of data// This has been dealt with in base_properties of the solution since the// warning primarily occurs in library header files (which are mostly// included before OrxonoxPlatform.h is)//#   pragma warning (disable : 4244)// disable: "conversion from 'size_t' to 'unsigned int', possible loss of data//#   pragma warning (disable : 4267)// disable: "truncation from 'double' to 'float'//#   pragma warning (disable : 4305)// set to level 4: "<type> needs to have dll-interface to be used by clients'// Happens on STL member variables which are not public therefore is ok#   pragma warning (disable : 4251)// disable: 'MultiTypeString' : multiple assignment operators specified// Used in MultiType and works fine so far//#   pragma warning (disable : 4522)// disable: "non dll-interface class used as base for dll-interface class"// Happens when deriving from Singleton because bug in compiler ignores// template export//#   pragma warning (disable : 4275)// disable: "C++ Exception Specification ignored"// This is because MSVC 6 did not implement all the C++ exception// specifications in the ANSI C++ draft.//#   pragma warning( disable : 4290 )// disable: "no suitable definition provided for explicit template// instantiation request" Occurs in VC7 for no justifiable reason on all// #includes of Singleton//#   pragma warning( disable: 4661)// disable: deprecation warnings when using CRT calls in VC8// These show up on all C runtime lib code in VC8, disable since they clutter// the warnings with things we may not be able to do anything about (e.g.// generated code from nvparse etc). I doubt very much that these calls// will ever be actually removed from VC anyway, it would break too much code.//#	pragma warning( disable: 4996)// disable: "conditional expression constant", always occurs on// ORXONOX_MUTEX_CONDITIONAL when no threading enabled//#   pragma warning (disable : 201)// Define the english written operators like and, or, xor#include <iso646.h>#endif /* ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC */// include visual leak detector to search for memory leaks//#include <vld.h>#endif /* _OrxonoxPlatform_H__ */
Index: code/branches/network/src/util/Sleep.h
===================================================================
--- code/branches/network/src/util/Sleep.h	(revision 1478)
+++ code/branches/network/src/util/Sleep.h	(revision 1494)
@@ -1,6 +1,5 @@
 /*
  *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
+ *                    > www.orxonox.net < *
  *
  *   License notice:
@@ -26,5 +25,4 @@
  *
  */
-
 /**
  @file  Sleep.h
@@ -34,9 +32,5 @@
 #include "UtilPrereqs.h"
 
-#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32
-#  ifndef WIN32_LEAN_AND_MEAN
-#    define WIN32_LEAN_AND_MEAN
-#  endif
-#  include <windows.h>
+#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32#  ifndef WIN32_LEAN_AND_MEAN#    define WIN32_LEAN_AND_MEAN#  endif#  include <windows.h>
 inline void usleep(DWORD dwMicroseconds)
 {
Index: code/branches/network/src/util/String.cc
===================================================================
--- code/branches/network/src/util/String.cc	(revision 1478)
+++ code/branches/network/src/util/String.cc	(revision 1494)
Index: code/branches/network/src/util/String.h
===================================================================
--- code/branches/network/src/util/String.h	(revision 1478)
+++ code/branches/network/src/util/String.h	(revision 1494)
Index: code/branches/network/src/util/SubString.cc
===================================================================
--- code/branches/network/src/util/SubString.cc	(revision 1478)
+++ code/branches/network/src/util/SubString.cc	(revision 1494)
@@ -1,38 +1,3 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   License notice:
- *
- *   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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Christian Meyer
- *   Co-authors:
- *      Benjamin Grauer
- *
-//
-//  splitLine
-//  STL string tokenizer
-//
-//  Created by Clemens Wacha.
-//  Version 1.0
-//  Copyright (c) 2005 Clemens Wacha. All rights reserved.
-//
- */
-
+/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Christian Meyer *   Co-authors: *      Benjamin Grauer *////  splitLine//  STL string tokenizer////  Created by Clemens Wacha.//  Version 1.0//  Copyright (c) 2005 Clemens Wacha. All rights reserved.// */
 #include "SubString.h"
 
@@ -67,6 +32,5 @@
 SubString::SubString(const std::string& string,
                      const std::string& delimiters, const std::string& delimiterNeighbours, bool emptyEntries,
-                     char escapeChar, bool removeEscapeChar, char safemode_char, bool removeSafemodeChar,
-                     char openparenthesis_char, char closeparenthesis_char, bool removeParenthesisChars, char comment_char)
+                     char escapeChar, bool removeEscapeChar, char safemode_char, bool removeSafemodeChar,                     char openparenthesis_char, char closeparenthesis_char, bool removeParenthesisChars, char comment_char)
 {
   SubString::splitLine(this->strings, this->bInSafemode, string, delimiters, delimiterNeighbours, emptyEntries, escapeChar, removeEscapeChar, safemode_char, removeSafemodeChar, openparenthesis_char, closeparenthesis_char, removeParenthesisChars, comment_char);
@@ -80,9 +44,6 @@
 SubString::SubString(const SubString& subString, unsigned int subSetBegin)
 {
-  for (unsigned int i = subSetBegin; i < subString.size(); i++)
-  {
-    this->strings.push_back(subString[i]);
-    this->bInSafemode.push_back(subString.isInSafemode(i));
-  }
+  for (unsigned int i = subSetBegin; i < subString.size(); i++)  {
+    this->strings.push_back(subString[i]);    this->bInSafemode.push_back(subString.isInSafemode(i));  }
 }
 
@@ -96,9 +57,6 @@
 SubString::SubString(const SubString& subString, unsigned int subSetBegin, unsigned int subSetEnd)
 {
-  for (unsigned int i = subSetBegin; i < subString.size() && i < subSetEnd; i++)
-  {
-    this->strings.push_back(subString[i]);
-    this->bInSafemode.push_back(subString.isInSafemode(i));
-  }
+  for (unsigned int i = subSetBegin; i < subString.size() && i < subSetEnd; i++)  {
+    this->strings.push_back(subString[i]);    this->bInSafemode.push_back(subString.isInSafemode(i));  }
 }
 
@@ -110,9 +68,6 @@
 SubString::SubString(unsigned int argc, const char** argv)
 {
-  for(unsigned int i = 0; i < argc; ++i)
-  {
-    this->strings.push_back(std::string(argv[i]));
-    this->bInSafemode.push_back(false);
-  }
+  for(unsigned int i = 0; i < argc; ++i)  {
+    this->strings.push_back(std::string(argv[i]));    this->bInSafemode.push_back(false);  }
 }
 
@@ -139,6 +94,5 @@
 SubString& SubString::operator=(const SubString& subString)
 {
-  this->strings = subString.strings;
-  this->bInSafemode = subString.bInSafemode;
+  this->strings = subString.strings;  this->bInSafemode = subString.bInSafemode;
   return *this;
 }
@@ -201,9 +155,6 @@
 SubString& SubString::operator+=(const SubString& subString)
 {
-  for (unsigned int i = 0; i < subString.size(); i++)
-  {
-    this->strings.push_back(subString[i]);
-    this->bInSafemode.push_back(subString.isInSafemode(i));
-  }
+  for (unsigned int i = 0; i < subString.size(); i++)  {
+    this->strings.push_back(subString[i]);    this->bInSafemode.push_back(subString.isInSafemode(i));  }
   return *this;
 }
@@ -217,6 +168,5 @@
 unsigned int SubString::split(const std::string& string, char splitter)
 {
-  this->strings.clear();
-  this->bInSafemode.clear();
+  this->strings.clear();  this->bInSafemode.clear();
   char split[2];
   split[0] = splitter;
@@ -239,9 +189,7 @@
 unsigned int SubString::split(const std::string& string,
                               const std::string& delimiters, const std::string& delimiterNeighbours, bool emptyEntries,
-                              char escapeChar, bool removeExcapeChar, char safemode_char, bool removeSafemodeChar,
-                              char openparenthesis_char, char closeparenthesis_char, bool removeParenthesisChars, char comment_char)
-{
-  this->strings.clear();
-  this->bInSafemode.clear();
+                              char escapeChar, bool removeExcapeChar, char safemode_char, bool removeSafemodeChar,                              char openparenthesis_char, char closeparenthesis_char, bool removeParenthesisChars, char comment_char)
+{
+  this->strings.clear();  this->bInSafemode.clear();
   SubString::splitLine(this->strings, this->bInSafemode, string, delimiters, delimiterNeighbours, emptyEntries, escapeChar, removeExcapeChar, safemode_char, removeSafemodeChar, openparenthesis_char, closeparenthesis_char, removeParenthesisChars, comment_char);
   return this->strings.size();
@@ -309,9 +257,5 @@
  * @param emptyEntries: if empty Strings are added to the List of Strings.
  * @param escape_char: Escape carater (escapes splitters)
- * @param safemode_char: the beginning of the safemode is marked with this
- * @param removeSafemodeChar removes the safemode_char from the beginning and the ending of a token
- * @param openparenthesis_char the beginning of a safemode is marked with this
- * @param closeparenthesis_char the ending of a safemode is marked with this
- * @param removeParenthesisChars removes the parenthesis from the beginning and the ending of a token
+ * @param safemode_char: the beginning of the safemode is marked with this * @param removeSafemodeChar removes the safemode_char from the beginning and the ending of a token * @param openparenthesis_char the beginning of a safemode is marked with this * @param closeparenthesis_char the ending of a safemode is marked with this * @param removeParenthesisChars removes the parenthesis from the beginning and the ending of a token
  * @param comment_char: the beginning of a comment is marked with this: (until the end of a Line)
  * @param start_state: the Initial state on how to parse the String.
@@ -323,17 +267,11 @@
  */
 SubString::SPLIT_LINE_STATE
-SubString::splitLine(std::vector<std::string>& ret,
-                     std::vector<bool>& bInSafemode,
+SubString::splitLine(std::vector<std::string>& ret,                     std::vector<bool>& bInSafemode,
                      const std::string& line,
                      const std::string& delimiters,
                      const std::string& delimiterNeighbours,
                      bool emptyEntries,
-                     char escape_char,
-                     bool removeExcapeChar,
-                     char safemode_char,
-                     bool removeSafemodeChar,
-                     char openparenthesis_char,
-                     char closeparenthesis_char,
-                     bool removeParenthesisChars,
+                     char escape_char,                     bool removeExcapeChar,
+                     char safemode_char,                     bool removeSafemodeChar,                     char openparenthesis_char,                     char closeparenthesis_char,                     bool removeParenthesisChars,
                      char comment_char,
                      SPLIT_LINE_STATE start_state)
@@ -343,18 +281,8 @@
   unsigned int fallBackNeighbours = 0;
 
-  std::string token;
-  bool inSafemode = false;
-
-  if(start_state != SL_NORMAL && ret.size() > 0)
-  {
-    token = ret[ret.size()-1];
-    ret.pop_back();
-  }
-  if(start_state != SL_NORMAL && bInSafemode.size() > 0)
-  {
-    inSafemode = bInSafemode[bInSafemode.size()-1];
-    bInSafemode.pop_back();
-  }
-
+  std::string token;  bool inSafemode = false;
+
+  if(start_state != SL_NORMAL && ret.size() > 0)  {    token = ret[ret.size()-1];
+    ret.pop_back();  }  if(start_state != SL_NORMAL && bInSafemode.size() > 0)  {    inSafemode = bInSafemode[bInSafemode.size()-1];    bInSafemode.pop_back();  }
   while(i < line.size())
   {
@@ -364,22 +292,10 @@
         if(line[i] == escape_char)
         {
-          state = SL_ESCAPE;
-          if (!removeExcapeChar)
-            token += line[i];
+          state = SL_ESCAPE;          if (!removeExcapeChar)            token += line[i];
         }
         else if(line[i] == safemode_char)
         {
-          state = SL_SAFEMODE;
-          inSafemode = true;
-          if (!removeSafemodeChar)
-            token += line[i];
-        }
-        else if(line[i] == openparenthesis_char)
-        {
-          state = SL_PARENTHESES;
-          inSafemode = true;
-          if (!removeParenthesisChars)
-            token += line[i];
-        }
+          state = SL_SAFEMODE;          inSafemode = true;          if (!removeSafemodeChar)            token += line[i];
+        }        else if(line[i] == openparenthesis_char)        {          state = SL_PARENTHESES;          inSafemode = true;          if (!removeParenthesisChars)            token += line[i];        }
         else if(line[i] == comment_char)
         {
@@ -389,9 +305,5 @@
           if(emptyEntries || token.size() > 0)
           {
-            ret.push_back(token);
-            token.clear();
-            bInSafemode.push_back(inSafemode);
-            inSafemode = false;
-          }
+            ret.push_back(token);            token.clear();            bInSafemode.push_back(inSafemode);            inSafemode = false;          }
           token += line[i];       // EAT
           state = SL_COMMENT;
@@ -407,7 +319,5 @@
             ret.push_back(token);
             token.clear();
-            bInSafemode.push_back(inSafemode);
-            inSafemode = false;
-          }
+            bInSafemode.push_back(inSafemode);            inSafemode = false;          }
           state = SL_NORMAL;
         }
@@ -429,9 +339,5 @@
         }
         break;
-      case SL_ESCAPE:
-        if (!removeSafemodeChar)
-          token += line[i];
-        else
-        {
+      case SL_ESCAPE:        if (!removeSafemodeChar)          token += line[i];        else        {
           if(line[i] == 'n') token += '\n';
           else if(line[i] == 't') token += '\t';
@@ -442,6 +348,5 @@
           else if(line[i] == 'a') token += '\a';
           else if(line[i] == '?') token += '\?';
-          else token += line[i];  // EAT
-        }
+          else token += line[i];  // EAT        }
         state = SL_NORMAL;
         break;
@@ -450,7 +355,5 @@
         {
           state = SL_NORMAL;
-          if (!removeSafemodeChar)
-            token += line[i];
-        }
+          if (!removeSafemodeChar)            token += line[i];        }
         else if(line[i] == escape_char)
         {
@@ -461,7 +364,5 @@
           token += line[i];       // EAT
         }
-        break;
-
-      case SL_SAFEESCAPE:
+        break;      case SL_SAFEESCAPE:
         if(line[i] == 'n') token += '\n';
         else if(line[i] == 't') token += '\t';
@@ -475,35 +376,5 @@
         state = SL_SAFEMODE;
         break;
-
-      case SL_PARENTHESES:
-        if(line[i] == closeparenthesis_char)
-        {
-          state = SL_NORMAL;
-          if (!removeParenthesisChars)
-            token += line[i];
-        }
-        else if(line[i] == escape_char)
-        {
-          state = SL_PARENTHESESESCAPE;
-        }
-        else
-        {
-          token += line[i];       // EAT
-        }
-        break;
-
-      case SL_PARENTHESESESCAPE:
-        if(line[i] == 'n') token += '\n';
-        else if(line[i] == 't') token += '\t';
-        else if(line[i] == 'v') token += '\v';
-        else if(line[i] == 'b') token += '\b';
-        else if(line[i] == 'r') token += '\r';
-        else if(line[i] == 'f') token += '\f';
-        else if(line[i] == 'a') token += '\a';
-        else if(line[i] == '?') token += '\?';
-        else token += line[i];  // EAT
-        state = SL_PARENTHESES;
-        break;
-
+      case SL_PARENTHESES:        if(line[i] == closeparenthesis_char)        {          state = SL_NORMAL;          if (!removeParenthesisChars)            token += line[i];        }        else if(line[i] == escape_char)        {          state = SL_PARENTHESESESCAPE;        }        else        {          token += line[i];       // EAT        }        break;      case SL_PARENTHESESESCAPE:        if(line[i] == 'n') token += '\n';        else if(line[i] == 't') token += '\t';        else if(line[i] == 'v') token += '\v';        else if(line[i] == 'b') token += '\b';        else if(line[i] == 'r') token += '\r';        else if(line[i] == 'f') token += '\f';        else if(line[i] == 'a') token += '\a';        else if(line[i] == '?') token += '\?';        else token += line[i];  // EAT        state = SL_PARENTHESES;        break;
       case SL_COMMENT:
         if(line[i] == '\n')
@@ -514,7 +385,5 @@
             ret.push_back(token);
             token.clear();
-            bInSafemode.push_back(inSafemode);
-            inSafemode = false;
-          }
+            bInSafemode.push_back(inSafemode);            inSafemode = false;          }
           state = SL_NORMAL;
         }
@@ -539,7 +408,5 @@
     ret.push_back(token);
     token.clear();
-    bInSafemode.push_back(inSafemode);
-    inSafemode = false;
-  }
+    bInSafemode.push_back(inSafemode);    inSafemode = false;  }
   return(state);
 }
Index: code/branches/network/src/util/SubString.h
===================================================================
--- code/branches/network/src/util/SubString.h	(revision 1478)
+++ code/branches/network/src/util/SubString.h	(revision 1494)
@@ -1,41 +1,3 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   License notice:
- *
- *   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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Christian Meyer
- *   Co-authors:
- *      Benjamin Grauer
- *      Fabian 'x3n' Landau
- *
-
-//  splitLine
-//  STL string tokenizer
-//
-//  Created by Clemens Wacha.
-//  Version 1.0
-//  Copyright (c) 2005 Clemens Wacha. All rights reserved.
-
- * Extended by Fabian 'x3n' Landau with the SL_PARENTHESES mode.
- */
-
- /*!
+/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Christian Meyer *   Co-authors: *      Benjamin Grauer *      Fabian 'x3n' Landau *//  splitLine//  STL string tokenizer////  Created by Clemens Wacha.//  Version 1.0//  Copyright (c) 2005 Clemens Wacha. All rights reserved. * Extended by Fabian 'x3n' Landau with the SL_PARENTHESES mode. */ /*!
  * @file substring.h
  * @brief a small class to get the parts of a string separated by commas
@@ -60,5 +22,4 @@
 
 #include "UtilPrereqs.h"
-
 #include <vector>
 #include <string>
@@ -78,7 +39,5 @@
     SL_SAFEMODE,          //!< In safe mode (between "" mostly).
     SL_SAFEESCAPE,        //!< In safe mode with the internal escape character, that escapes even the savemode character.
-    SL_COMMENT,           //!< In Comment mode.
-    SL_PARENTHESES,       //!< Between parentheses (usually '(' and ')')
-    SL_PARENTHESESESCAPE, //!< Between parentheses with the internal escape character, that escapes even the closing paranthesis character.
+    SL_COMMENT,           //!< In Comment mode.    SL_PARENTHESES,       //!< Between parentheses (usually '(' and ')')    SL_PARENTHESESESCAPE, //!< Between parentheses with the internal escape character, that escapes even the closing paranthesis character.
   } SPLIT_LINE_STATE;
 
@@ -89,6 +48,5 @@
   SubString(const std::string& string,
             const std::string& delimiters, const std::string& delimiterNeighbours = "", bool emptyEntries=false,
-            char escapeChar ='\\', bool removeEscapeChar = true, char safemode_char = '"', bool removeSafemodeChar = true,
-            char openparenthesis_char = '(', char closeparenthesis_char = ')',  bool removeParenthesisChars = true, char comment_char = '\0');
+            char escapeChar ='\\', bool removeEscapeChar = true, char safemode_char = '"', bool removeSafemodeChar = true,            char openparenthesis_char = '(', char closeparenthesis_char = ')',  bool removeParenthesisChars = true, char comment_char = '\0');
   SubString(unsigned int argc, const char** argv);
   /** @brief create a Substring as a copy of another one. @param subString the SubString to copy. */
@@ -113,6 +71,5 @@
   unsigned int split(const std::string& string,
                      const std::string& delimiters, const std::string& delimiterNeighbours = "", bool emptyEntries = false,
-                     char escapeChar ='\\', bool removeExcapeChar = true, char safemode_char = '"', bool removeSafemodeChar = true,
-                     char openparenthesis_char = '(', char closeparenthesis_char = ')',  bool removeParenthesisChars = true, char comment_char = '\0');
+                     char escapeChar ='\\', bool removeExcapeChar = true, char safemode_char = '"', bool removeSafemodeChar = true,                     char openparenthesis_char = '(', char closeparenthesis_char = ')',  bool removeParenthesisChars = true, char comment_char = '\0');
   std::string join(const std::string& delimiter = " ") const;
   ////////////////////////////////////////
@@ -130,7 +87,5 @@
   inline const std::string& operator[](unsigned int i) const { return this->strings[i]; };
   /** @brief Returns the i'th string from the subset of Strings @param i the i'th String */
-  inline const std::string& getString(unsigned int i) const { return (*this)[i]; };
-  /** @brief Returns true if the token is in safemode. @param i the i'th token */
-  inline bool isInSafemode(unsigned int i) const { return this->bInSafemode[i]; }
+  inline const std::string& getString(unsigned int i) const { return (*this)[i]; };  /** @brief Returns true if the token is in safemode. @param i the i'th token */  inline bool isInSafemode(unsigned int i) const { return this->bInSafemode[i]; }
   /** @brief Returns the front of the StringList. */
   inline const std::string& front() const { return this->strings.front(); };
@@ -141,18 +96,12 @@
 
   // the almighty algorithm.
-  static SPLIT_LINE_STATE splitLine(std::vector<std::string>& ret,
-                                    std::vector<bool>& bInSafemode,
+  static SPLIT_LINE_STATE splitLine(std::vector<std::string>& ret,                                    std::vector<bool>& bInSafemode,
                                     const std::string& line,
                                     const std::string& delimiters = SubString::WhiteSpaces,
                                     const std::string& delimiterNeighbours = "",
                                     bool emptyEntries = false,
-                                    char escape_char = '\\',
-                                    bool removeExcapeChar = true,
+                                    char escape_char = '\\',                                    bool removeExcapeChar = true,
                                     char safemode_char = '"',
-                                    bool removeSafemodeChar = true,
-                                    char openparenthesis_char = '(',
-                                    char closeparenthesis_char = ')',
-                                    bool removeParenthesisChars = true,
-                                    char comment_char = '\0',
+                                    bool removeSafemodeChar = true,                                    char openparenthesis_char = '(',                                    char closeparenthesis_char = ')',                                    bool removeParenthesisChars = true,                                    char comment_char = '\0',
                                     SPLIT_LINE_STATE start_state = SL_NORMAL);
   // debugging.
@@ -165,6 +114,5 @@
 
 private:
-  std::vector<std::string>  strings;                      //!< strings produced from a single string splitted in multiple strings
-  std::vector<bool>         bInSafemode;
+  std::vector<std::string>  strings;                      //!< strings produced from a single string splitted in multiple strings  std::vector<bool>         bInSafemode;
 };
 
Index: code/branches/network/src/util/UtilPrereqs.h
===================================================================
--- code/branches/network/src/util/UtilPrereqs.h	(revision 1478)
+++ code/branches/network/src/util/UtilPrereqs.h	(revision 1494)
@@ -1,6 +1,5 @@
 /*
  *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
+ *                    > www.orxonox.net < *
  *
  *   License notice:
@@ -31,5 +30,4 @@
   @brief Contains all the necessary forward declarations for all classes and structs.
 */
-
 #ifndef _UtilPrereqs_H__
 #define _UtilPrereqs_H__
@@ -60,12 +58,5 @@
 // Forward declarations
 //-----------------------------------------------------------------------
-class ArgReader;
-class Convert;
-class MultiTypePrimitive;
-class MultiTypeString;
-class MultiTypeMath;
-template <class T>
-class String2Number;
-class SubString;
+class ArgReader;class Convert;class MultiTypePrimitive;class MultiTypeString;class MultiTypeMath;template <class T>class String2Number;class SubString;
 
 #endif /* _UtilPrereqs_H__ */
Index: code/branches/network/src/util/XMLIncludes.h
===================================================================
--- code/branches/network/src/util/XMLIncludes.h	(revision 1478)
+++ code/branches/network/src/util/XMLIncludes.h	(revision 1494)
