style cleanup
[blender.git] / source / blender / compositor / intern / COM_OutputSocket.h
1 /*
2  * Copyright 2011, Blender Foundation.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributor: 
19  *              Jeroen Bakker 
20  *              Monique Dewanchand
21  */
22
23 #ifndef _COM_OutputSocket_h
24 #define _COM_OutputSocket_h
25
26 #include <vector>
27 #include "COM_Socket.h"
28 #include "COM_ChannelInfo.h"
29
30 using namespace std;
31 class SocketConnection;
32 class Node;
33 class InputSocket;
34 class WriteBufferOperation;
35
36 //#define COM_ST_INPUT 0
37 //#define COM_ST_OUTPUT 1
38
39 /**
40  * @brief OutputSocket are sockets that can send data/input
41  * @ingroup Model
42  */
43 class OutputSocket : public Socket {
44 private:
45         vector<SocketConnection *> m_connections;
46                 
47         void removeFirstConnection();
48 public:
49         OutputSocket(DataType datatype);
50         OutputSocket(DataType datatype, int inputSocketDataTypeDeterminatorIndex);
51         OutputSocket(OutputSocket *from);
52         void addConnection(SocketConnection *connection);
53         SocketConnection *getConnection(unsigned int index) { return this->m_connections[index]; }
54         const int isConnected() const;
55         int isOutputSocket() const;
56         
57         /**
58          * @brief determine the resolution of this socket
59          * @param resolution the result of this operation
60          * @param preferredResolution the preferrable resolution as no resolution could be determined
61          */
62         void determineResolution(unsigned int resolution[2], unsigned int preferredResolution[2]);
63         
64         /**
65          * @brief determine the actual data type and channel info.
66          */
67         void relinkConnections(OutputSocket *relinkToSocket) { this->relinkConnections(relinkToSocket, false); }
68         void relinkConnections(OutputSocket *relinkToSocket, bool single);
69         const int getNumberOfConnections() { return this->m_connections.size(); }
70         
71         void clearConnections();
72         
73         /**
74          * @brief find a connected write buffer operation to this OutputSocket
75          * @return WriteBufferOperation or NULL
76          */
77         WriteBufferOperation *findAttachedWriteBufferOperation() const;
78         ChannelInfo *getChannelInfo(const int channelnumber);
79         
80 private:
81
82 };
83 #endif