common: prevent buffer overflow
[supercollider.git] / include / server / SC_HiddenWorld.h
blob4988b9e066ddbf7a27ca18eee9c2794e25fdf968
1 /*
2 SuperCollider real time audio synthesis system
3 Copyright (c) 2002 James McCartney. All rights reserved.
4 http://www.audiosynth.com
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
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.
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, MA 02110-1301 USA
22 #ifndef _SC_HiddenWorld_
23 #define _SC_HiddenWorld_
25 #include "SC_Types.h"
26 #include "SC_Sem.h"
27 #include "SC_Rate.h"
28 #include "SC_SndBuf.h"
29 #include "SC_RGen.h"
30 #include "HashTable.h"
31 #include "SC_World.h"
32 #include "SC_Reply.h"
33 #include "MsgFifo.h"
35 #include "../../common/server_shm.hpp"
37 extern HashTable<struct UnitDef, Malloc> *gUnitDefLib;
40 struct TriggerMsg {
41 World *mWorld;
42 int32 mNodeID;
43 int32 mTriggerID;
44 float mValue;
46 void Perform();
50 struct NodeReplyMsg {
51 World *mWorld;
52 int32 mNodeID;
53 int32 mID;
54 int32 mNumArgs;
55 float *mValues;
56 int32 mCmdNameSize;
57 char *mCmdName;
58 void *mRTMemory;
59 void Perform();
63 struct NodeEndMsg {
64 World *mWorld;
65 int32 mNodeID;
66 int32 mGroupID;
67 int32 mPrevNodeID;
68 int32 mNextNodeID;
69 int32 mIsGroup;
70 int32 mHeadID;
71 int32 mTailID;
72 int32 mState;
74 void Perform();
77 struct DeleteGraphDefMsg {
78 struct GraphDef* mDef;
80 void Perform();
84 typedef MsgFifoNoFree<TriggerMsg, 1024> TriggersFifo;
85 typedef MsgFifoNoFree<NodeReplyMsg, 1024> NodeReplyFifo;
86 typedef MsgFifoNoFree<NodeEndMsg, 1024> NodeEndsFifo;
87 typedef MsgFifoNoFree<DeleteGraphDefMsg, 512> DeleteGraphDefsFifo;
88 typedef HashTable<struct GraphDef, Malloc> GrafDefTable;
90 struct HiddenWorld
92 class AllocPool *mAllocPool;
93 IntHashTable<struct Node, AllocPool> *mNodeLib;
94 GrafDefTable *mGraphDefLib;
95 uint32 mNumUsers, mMaxUsers;
96 ReplyAddress *mUsers;
98 class SC_AudioDriver *mAudioDriver;
99 char mPassword[32];
101 uint32 mMaxWireBufs;
102 float *mWireBufSpace;
104 TriggersFifo mTriggers;
105 NodeReplyFifo mNodeMsgs;
106 NodeEndsFifo mNodeEnds;
107 DeleteGraphDefsFifo mDeleteGraphDefs;
109 SC_Semaphore* mQuitProgram;
110 bool mTerminating;
112 #ifndef NO_LIBSNDFILE
113 SNDFILE *mNRTInputFile;
114 SNDFILE *mNRTOutputFile;
115 FILE *mNRTCmdFile;
116 #endif
118 int32 mHiddenID;
119 int32 mRecentID;
121 #ifdef __APPLE__
122 const char* mInputStreamsEnabled;
123 const char* mOutputStreamsEnabled;
124 #endif
125 const char *mInDeviceName;
126 const char *mOutDeviceName;
127 class server_shared_memory_creator * mShmem;
130 typedef struct HiddenWorld HiddenWorld;
132 inline SC_AudioDriver *AudioDriver(World *inWorld)
134 return inWorld->hw->mAudioDriver;
137 #endif