/[svn]/libgig/trunk/src/Serialization.cpp
ViewVC logotype

Diff of /libgig/trunk/src/Serialization.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3186 by schoenebeck, Wed May 17 15:55:18 2017 UTC revision 3454 by persson, Sun Jan 27 10:07:48 2019 UTC
# Line 1  Line 1 
1  /***************************************************************************  /***************************************************************************
2   *                                                                         *   *                                                                         *
3   *   Copyright (C) 2017 Christian Schoenebeck                              *   *   Copyright (C) 2017-2019 Christian Schoenebeck                         *
4   *                      <cuse@users.sourceforge.net>                       *   *                           <cuse@users.sourceforge.net>                  *
5   *                                                                         *   *                                                                         *
6   *   This library is part of libgig.                                       *   *   This library is part of libgig.                                       *
7   *                                                                         *   *                                                                         *
# Line 21  Line 21 
21   *   MA  02111-1307  USA                                                   *   *   MA  02111-1307  USA                                                   *
22   ***************************************************************************/   ***************************************************************************/
23    
24    // enable implementation specific declarations in Serialization.h required to
25    // build this C++ unit, which should be ignored in the public API though
26    #define LIBGIG_SERIALIZATION_INTERNAL 1
27    
28  #include "Serialization.h"  #include "Serialization.h"
29    
30  #include <iostream>  #include <iostream>
# Line 250  namespace Serialization { Line 254  namespace Serialization {
254       * characteristic is compared as well. So a @c double type and @c double*       * characteristic is compared as well. So a @c double type and @c double*
255       * type are also considered to be not equal data types and hence this method       * type are also considered to be not equal data types and hence this method
256       * would return @c false.       * would return @c false.
257         *
258         * As an exception here, classes and structs with the same class/struct name
259         * but different sizes are also considered to be "equal". This relaxed
260         * requirement is necessary to retain backward compatiblity to older
261         * versions of the same native C++ classes/structs.
262       */       */
263      bool DataType::operator==(const DataType& other) const {      bool DataType::operator==(const DataType& other) const {
264          return m_baseTypeName   == other.m_baseTypeName &&          return m_baseTypeName   == other.m_baseTypeName &&
265                 m_customTypeName == other.m_customTypeName &&                 m_customTypeName == other.m_customTypeName &&
266                 m_size           == other.m_size &&                 (m_size == other.m_size || (isClass() && other.isClass())) &&
267                 m_isPointer      == other.m_isPointer;                 m_isPointer      == other.m_isPointer;
268      }      }
269    
# Line 281  namespace Serialization { Line 290  namespace Serialization {
290      bool DataType::operator<(const DataType& other) const {      bool DataType::operator<(const DataType& other) const {
291          return m_baseTypeName  < other.m_baseTypeName ||          return m_baseTypeName  < other.m_baseTypeName ||
292                (m_baseTypeName == other.m_baseTypeName &&                (m_baseTypeName == other.m_baseTypeName &&
293                 m_customTypeName  < other.m_customTypeName ||                (m_customTypeName  < other.m_customTypeName ||
294                (m_customTypeName == other.m_customTypeName &&                (m_customTypeName == other.m_customTypeName &&
295                 m_size  < other.m_size ||                (m_size  < other.m_size ||
296                (m_size == other.m_size &&                (m_size == other.m_size &&
297                 m_isPointer < other.m_isPointer)));                 m_isPointer < other.m_isPointer)))));
298      }      }
299    
300      /** @brief Greater than comparison.      /** @brief Greater than comparison.
# Line 568  namespace Serialization { Line 577  namespace Serialization {
577      bool Member::operator<(const Member& other) const {      bool Member::operator<(const Member& other) const {
578          return m_uid  < other.m_uid ||          return m_uid  < other.m_uid ||
579                (m_uid == other.m_uid &&                (m_uid == other.m_uid &&
580                 m_offset  < other.m_offset ||                (m_offset  < other.m_offset ||
581                (m_offset == other.m_offset &&                (m_offset == other.m_offset &&
582                 m_name  < other.m_name ||                (m_name  < other.m_name ||
583                (m_name == other.m_name &&                (m_name == other.m_name &&
584                 m_type < other.m_type)));                 m_type < other.m_type)))));
585      }      }
586    
587      /** @brief Greater than comparison.      /** @brief Greater than comparison.
# Line 1409  namespace Serialization { Line 1418  namespace Serialization {
1418          return (time_t) i;          return (time_t) i;
1419      }      }
1420    
1421      DataType _popDataTypeBlob(const char*& p, const char* end) {      static DataType _popDataTypeBlob(const char*& p, const char* end) {
1422          _Blob blob = _decodeBlob(p, end);          _Blob blob = _decodeBlob(p, end);
1423          p   = blob.p;          p   = blob.p;
1424          end = blob.end;          end = blob.end;
# Line 2286  namespace Serialization { Line 2295  namespace Serialization {
2295      // *************** Exception ***************      // *************** Exception ***************
2296      // *      // *
2297    
2298        Exception::Exception() {
2299        }
2300    
2301        Exception::Exception(String format, ...) {
2302            va_list arg;
2303            va_start(arg, format);
2304            Message = assemble(format, arg);
2305            va_end(arg);
2306        }
2307    
2308        Exception::Exception(String format, va_list arg) {
2309            Message = assemble(format, arg);
2310        }
2311    
2312      /** @brief Print exception message to stdout.      /** @brief Print exception message to stdout.
2313       *       *
2314       * Prints the message of this Exception to the currently defined standard       * Prints the message of this Exception to the currently defined standard
# Line 2295  namespace Serialization { Line 2318  namespace Serialization {
2318          std::cout << "Serialization::Exception: " << Message << std::endl;          std::cout << "Serialization::Exception: " << Message << std::endl;
2319      }      }
2320    
2321        String Exception::assemble(String format, va_list arg) {
2322            char* buf = NULL;
2323            vasprintf(&buf, format.c_str(), arg);
2324            String s = buf;
2325            free(buf);
2326            return s;
2327        }
2328    
2329  } // namespace Serialization  } // namespace Serialization

Legend:
Removed from v.3186  
changed lines
  Added in v.3454

  ViewVC Help
Powered by ViewVC