summaryrefslogtreecommitdiff
path: root/cpp/include/Ice/Object.h
blob: 4e8273cf7f025d58537cc6f79384f3e51b3edd63 (plain)
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
// **********************************************************************
//
// Copyright (c) 2003
// ZeroC, Inc.
// Billerica, MA, USA
//
// All Rights Reserved.
//
// Ice is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License version 2 as published by
// the Free Software Foundation.
//
// **********************************************************************

#ifndef ICE_OBJECT_H
#define ICE_OBJECT_H

#include <IceUtil/Shared.h>
#include <IceUtil/Mutex.h>
#include <Ice/ObjectF.h>
#include <Ice/ProxyF.h>
#include <Ice/StreamF.h>
#include <Ice/IncomingAsyncF.h>
#include <Ice/Current.h>

namespace IceInternal
{

class Incoming;
class BasicStream;

enum DispatchStatus
{
    DispatchOK,
    DispatchUserException,
    DispatchObjectNotExist,
    DispatchFacetNotExist,
    DispatchOperationNotExist,
    DispatchUnknownLocalException,
    DispatchUnknownUserException,
    DispatchUnknownException,
    DispatchAsync // "Pseudo dispatch status", used internally only to indicate async dispatch.
};

}

namespace Ice
{

class ICE_API Object : virtual public ::IceUtil::Shared
{
public:

    Object();

    virtual bool operator==(const Object&) const;
    virtual bool operator!=(const Object&) const;
    virtual bool operator<(const Object&) const;
    virtual ::Ice::Int ice_hash() const;

    static const ::std::string __ids[];

    virtual bool ice_isA(const ::std::string&, const Current& = Current()) const;
    ::IceInternal::DispatchStatus ___ice_isA(::IceInternal::Incoming&, const Current&);

    virtual void ice_ping(const Current&  = Current()) const;
    ::IceInternal::DispatchStatus ___ice_ping(::IceInternal::Incoming&, const Current&);

    virtual ::std::vector< ::std::string> ice_ids(const Current& = Current()) const;
    ::IceInternal::DispatchStatus ___ice_ids(::IceInternal::Incoming&, const Current&);

    virtual const ::std::string& ice_id(const Current& = Current()) const;
    ::IceInternal::DispatchStatus ___ice_id(::IceInternal::Incoming&, const Current&);

    ::std::vector< ::std::string> ice_facets(const Current& = Current()) const;
    ::IceInternal::DispatchStatus ___ice_facets(::IceInternal::Incoming&, const Current&);

    static const ::std::string& ice_staticId();

    void __copyMembers(::Ice::ObjectPtr) const;
    virtual ::Ice::ObjectPtr ice_clone() const;

    static ::std::string __all[];
    virtual ::IceInternal::DispatchStatus __dispatch(::IceInternal::Incoming&, const Current&);

    virtual void __write(::IceInternal::BasicStream*) const;
    virtual void __read(::IceInternal::BasicStream*, bool = true);

    virtual void __marshal(const ::Ice::StreamPtr&, bool) const;
    virtual void __unmarshal(const ::Ice::StreamPtr&);

    void ice_marshal(const ::std::string&, const ::Ice::StreamPtr&);
    static void ice_unmarshal(const ::std::string&, const ::Ice::StreamPtr&, ObjectPtr&);

    void ice_addFacet(const ObjectPtr&, const ::std::string&);
    ObjectPtr ice_removeFacet(const ::std::string&);
    ObjectPtr ice_updateFacet(const ObjectPtr&, const ::std::string&);
    void ice_removeAllFacets();
    ObjectPtr ice_findFacet(const ::std::string&);
    ObjectPtr ice_findFacetPath(const ::std::vector< ::std::string>&, int);

private:

    std::map<std::string, ObjectPtr> _activeFacetMap;
    std::map<std::string, ObjectPtr>::iterator _activeFacetMapHint;
    ::IceUtil::Mutex _activeFacetMapMutex;
    static const char * const _kindOfObject;
};

void ICE_API __patch__ObjectPtr(void*, ObjectPtr&);

class ICE_API Blobject : virtual public Object
{
public:

    // Returns true if ok, false if user exception.
    virtual bool ice_invoke(const std::vector<Byte>&, std::vector<Byte>&, const Current&) = 0;
    virtual ::IceInternal::DispatchStatus __dispatch(::IceInternal::Incoming&, const Current&);
};

class ICE_API BlobjectAsync : virtual public Object
{
public:

    // Returns true if ok, false if user exception.
    virtual void ice_invoke_async(const AMD_Object_ice_invokePtr&, const std::vector<Byte>&, const Current&) = 0;
    virtual ::IceInternal::DispatchStatus __dispatch(::IceInternal::Incoming&, const Current&);
};

}

#endif