1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
|
//
// Copyright (c) ZeroC, Inc. All rights reserved.
//
#ifndef ICE_SLICED_DATA_H
#define ICE_SLICED_DATA_H
#include <Ice/SlicedDataF.h>
#include <Ice/GCObject.h>
#include <Ice/Value.h>
namespace Ice
{
/**
* Encapsulates the details of a slice for an unknown class or exception type.
* \headerfile Ice/Ice.h
*/
struct ICE_API SliceInfo
#ifndef ICE_CPP11_MAPPING
: public ::IceUtil::Shared
#endif
{
/**
* The Slice type ID for this slice.
*/
::std::string typeId;
/**
* The Slice compact type ID for this slice.
*/
int compactId;
/**
* The encoded bytes for this slice, including the leading size integer.
*/
::std::vector<Byte> bytes;
/**
* The class instances referenced by this slice.
*/
::std::vector<ValuePtr> instances;
/**
* Whether or not the slice contains optional members.
*/
bool hasOptionalMembers;
/**
* Whether or not this is the last slice.
*/
bool isLastSlice;
};
/**
* Holds the slices of unknown types.
* \headerfile Ice/Ice.h
*/
class ICE_API SlicedData
#ifndef ICE_CPP11_MAPPING
: public ::IceUtil::Shared
#endif
{
public:
#ifndef ICE_CPP11_MAPPING
virtual ~SlicedData();
#endif
SlicedData(const SliceInfoSeq&);
/** The slices of unknown types. */
const SliceInfoSeq slices;
/**
* Clears the slices to break potential cyclic references.
*/
void clear();
#ifndef ICE_CPP11_MAPPING
/// \cond INTERNAL
void _iceGcVisitMembers(IceInternal::GCVisitor&);
/// \endcond
#endif
};
/**
* Represents an instance of an unknown type.
* \headerfile Ice/Ice.h
*/
class ICE_API UnknownSlicedValue :
#ifdef ICE_CPP11_MAPPING
public Value
#else
public IceInternal::GCObject
#endif
{
public:
/**
* Constructs the placeholder instance.
* @param unknownTypeId The Slice type ID of the unknown value.
*/
UnknownSlicedValue(const std::string& unknownTypeId);
#ifdef ICE_CPP11_MAPPING
/**
* Obtains the sliced data associated with this instance.
* @return The sliced data if the value has a preserved-slice base class and has been sliced during
* unmarshaling of the value, or nil otherwise.
*/
virtual SlicedDataPtr ice_getSlicedData() const override;
/**
* Determine the Slice type ID associated with this instance.
* @return The type ID supplied to the constructor.
*/
virtual std::string ice_id() const override;
/**
* Clones this object.
* @return A new instance.
*/
std::shared_ptr<UnknownSlicedValue> ice_clone() const;
/// \cond STREAM
virtual void _iceWrite(::Ice::OutputStream*) const override;
virtual void _iceRead(::Ice::InputStream*) override;
/// \endcond
protected:
/// \cond INTERNAL
virtual std::shared_ptr<Value> _iceCloneImpl() const override;
/// \endcond
#else
/**
* Obtains the sliced data associated with this instance.
* @return The sliced data if the value has a preserved-slice base class and has been sliced during
* unmarshaling of the value, or nil otherwise.
*/
virtual SlicedDataPtr ice_getSlicedData() const;
/**
* Determine the Slice type ID associated with this instance.
* @param current The current object for this invocation.
* @return The type ID supplied to the constructor.
*/
virtual const std::string& ice_id(const Current& current = Ice::emptyCurrent) const;
/// \cond INTERNAL
virtual void _iceGcVisitMembers(IceInternal::GCVisitor&);
/// \endcond
/// \cond STREAM
virtual void _iceWrite(::Ice::OutputStream*) const;
virtual void _iceRead(::Ice::InputStream*);
/// \endcond
#endif
private:
const std::string _unknownTypeId;
SlicedDataPtr _slicedData;
};
}
#endif
|