1 /**
2  * UGENE - Integrated Bioinformatics Tools.
3  * Copyright (C) 2008-2021 UniPro <ugene@unipro.ru>
4  * http://ugene.net
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  * MA 02110-1301, USA.
20  */
21 
22 #ifndef _U2_WORKFLOW_PEER_H_
23 #define _U2_WORKFLOW_PEER_H_
24 
25 #include <U2Lang/Descriptor.h>
26 
27 namespace U2 {
28 
29 namespace Workflow {
30 
31 /**
32  * wrapper throw 'void*'
33  * use as a base class to store any pointer in your class
34  */
35 class U2LANG_EXPORT Peer {
36 public:
Peer()37     Peer()
38         : peer(nullptr) {
39     }
~Peer()40     virtual ~Peer() {
41     }
42 
43     // casting to whatever you want
44     template<typename T>
castPeer()45     inline T *castPeer() const {
46         return (T *)(peer);
47     }
48 
getPeer()49     void *getPeer() const {
50         return peer;
51     }
setPeer(void * p)52     void setPeer(void *p) {
53         peer = p;
54     }
55 
56 protected:
57     // any pointer
58     void *peer;
59 
60 };  // Peer
61 
62 }  // namespace Workflow
63 
64 }  // namespace U2
65 
66 #endif  // _U2_WORKFLOW_PEER_H_
67