secureswitools/swisistools/source/xmlparser/xerces/include/xercesc/internal/XSerializable.hpp
changeset 3 127731b7107d
equal deleted inserted replaced
2:661f3784fe57 3:127731b7107d
       
     1 /*
       
     2  * Licensed to the Apache Software Foundation (ASF) under one or more
       
     3  * contributor license agreements.  See the NOTICE file distributed with
       
     4  * this work for additional information regarding copyright ownership.
       
     5  * The ASF licenses this file to You under the Apache License, Version 2.0
       
     6  * (the "License"); you may not use this file except in compliance with
       
     7  * the License.  You may obtain a copy of the License at
       
     8  * 
       
     9  *      http://www.apache.org/licenses/LICENSE-2.0
       
    10  * 
       
    11  * Unless required by applicable law or agreed to in writing, software
       
    12  * distributed under the License is distributed on an "AS IS" BASIS,
       
    13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       
    14  * See the License for the specific language governing permissions and
       
    15  * limitations under the License.
       
    16  */
       
    17 
       
    18 /*
       
    19  * $Id: XSerializable.hpp 568078 2007-08-21 11:43:25Z amassari $
       
    20  */
       
    21 
       
    22 #if !defined(XSERIALIZABLE_HPP)
       
    23 #define XSERIALIZABLE_HPP
       
    24 
       
    25 #include <xercesc/internal/XSerializeEngine.hpp>
       
    26 #include <xercesc/internal/XProtoType.hpp>
       
    27 
       
    28 XERCES_CPP_NAMESPACE_BEGIN
       
    29 
       
    30 class XMLUTIL_EXPORT XSerializable
       
    31 {
       
    32 public :
       
    33 
       
    34     // -----------------------------------------------------------------------
       
    35     //  Constructors and Destructor
       
    36     // -----------------------------------------------------------------------
       
    37     virtual ~XSerializable() {} ;
       
    38 
       
    39     // -----------------------------------------------------------------------
       
    40     //  Serialization Interface
       
    41     // -----------------------------------------------------------------------   
       
    42     virtual bool        isSerializable()               const = 0;
       
    43 
       
    44     virtual void        serialize(XSerializeEngine& )        = 0;
       
    45 
       
    46     virtual XProtoType* getProtoType()                 const = 0;
       
    47 
       
    48 protected:
       
    49     XSerializable() {}
       
    50     XSerializable(const XSerializable& ) {}             
       
    51 
       
    52 private:
       
    53     // -----------------------------------------------------------------------
       
    54     //  Unimplemented assignment operator
       
    55     // -----------------------------------------------------------------------
       
    56 	XSerializable& operator=(const XSerializable&);
       
    57 
       
    58 };
       
    59 
       
    60 inline void XSerializable::serialize(XSerializeEngine& )
       
    61 {
       
    62 }
       
    63 
       
    64 /***
       
    65  * Macro to be included in XSerializable derivatives'
       
    66  * declaration's public section
       
    67  ***/
       
    68 #define DECL_XSERIALIZABLE(class_name) \
       
    69 public: \
       
    70 \
       
    71 DECL_XPROTOTYPE(class_name) \
       
    72 \
       
    73 virtual bool                    isSerializable()                  const ;  \
       
    74 virtual XProtoType*             getProtoType()                    const;   \
       
    75 virtual void                    serialize(XSerializeEngine&); \
       
    76 \
       
    77 inline friend XSerializeEngine& operator>>(XSerializeEngine& serEng  \
       
    78                                          , class_name*&      objPtr) \
       
    79 {objPtr = (class_name*) serEng.read(XPROTOTYPE_CLASS(class_name));   \
       
    80  return serEng; \
       
    81 };
       
    82 	
       
    83 /***
       
    84  * Macro to be included in the implementation file
       
    85  * of XSerializable derivatives' which is instantiable
       
    86  ***/
       
    87 #define IMPL_XSERIALIZABLE_TOCREATE(class_name) \
       
    88 IMPL_XPROTOTYPE_TOCREATE(class_name) \
       
    89 IMPL_XSERIAL(class_name)
       
    90 
       
    91 /***
       
    92  * Macro to be included in the implementation file
       
    93  * of XSerializable derivatives' which is UN-instantiable
       
    94  ***/
       
    95 #define IMPL_XSERIALIZABLE_NOCREATE(class_name) \
       
    96 IMPL_XPROTOTYPE_NOCREATE(class_name) \
       
    97 IMPL_XSERIAL(class_name)
       
    98 
       
    99 /***
       
   100  * Helper Macro 
       
   101  ***/
       
   102 #define IMPL_XSERIAL(class_name) \
       
   103 bool        class_name::isSerializable() const \
       
   104 {return true; } \
       
   105 XProtoType* class_name::getProtoType()   const \
       
   106 {return XPROTOTYPE_CLASS(class_name); } 
       
   107 
       
   108 #define IS_EQUIVALENT(lptr, rptr) \
       
   109     if (lptr == rptr)             \
       
   110         return true;              \
       
   111     if (( lptr && !rptr) || (!lptr &&  rptr))  \
       
   112         return false;
       
   113 
       
   114 XERCES_CPP_NAMESPACE_END
       
   115 
       
   116 #endif
       
   117