diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index a3e50b4901..7928997a29 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -86,15 +86,15 @@ void *sendBuffer(void *args) sentBytes = 0; for (AgentList::iterator agent = agentList->begin(); agent != agentList->end(); agent++) { - AudioRingBuffer *agentBuffer = (AudioRingBuffer *)(*agent).getLinkedData(); + AudioRingBuffer *agentBuffer = (AudioRingBuffer *)agent->getLinkedData(); if (agentBuffer != NULL && agentBuffer->getEndOfLastWrite() != NULL) { if (!agentBuffer->isStarted() && agentBuffer->diffLastWriteNextOutput() <= BUFFER_LENGTH_SAMPLES_PER_CHANNEL + JITTER_BUFFER_SAMPLES) { - printf("Held back buffer for agent with ID %d.\n", (*agent).getAgentId()); + printf("Held back buffer for agent with ID %d.\n", agent->getAgentId()); } else if (agentBuffer->diffLastWriteNextOutput() < BUFFER_LENGTH_SAMPLES_PER_CHANNEL) { - printf("Buffer from agent with ID %d starved.\n", (*agent).getAgentId()); + printf("Buffer from agent with ID %d starved.\n", agent->getAgentId()); agentBuffer->setStarted(false); } else { // good buffer, add this to the mix @@ -109,7 +109,7 @@ void *sendBuffer(void *args) memset(distanceCoeffs, 0, sizeof(distanceCoeffs)); for (AgentList::iterator agent = agentList->begin(); agent != agentList->end(); agent++) { - AudioRingBuffer *agentRingBuffer = (AudioRingBuffer *)(*agent).getLinkedData(); + AudioRingBuffer *agentRingBuffer = (AudioRingBuffer *)agent->getLinkedData(); float agentBearing = agentRingBuffer->getBearing(); bool agentWantsLoopback = false; @@ -218,11 +218,11 @@ void *sendBuffer(void *args) } } - agentList->getAgentSocket().send((*agent).getPublicSocket(), clientMix, BUFFER_LENGTH_BYTES); + agentList->getAgentSocket().send(agent->getPublicSocket(), clientMix, BUFFER_LENGTH_BYTES); } for (AgentList::iterator agent = agentList->begin(); agent != agentList->end(); agent++) { - AudioRingBuffer *agentBuffer = (AudioRingBuffer *)(*agent).getLinkedData(); + AudioRingBuffer *agentBuffer = (AudioRingBuffer *)agent->getLinkedData(); if (agentBuffer->wasAddedToMix()) { agentBuffer->setNextOutput(agentBuffer->getNextOutput() + BUFFER_LENGTH_SAMPLES_PER_CHANNEL); diff --git a/domain-server/src/main.cpp b/domain-server/src/main.cpp index 2126d8e561..25cecf133b 100644 --- a/domain-server/src/main.cpp +++ b/domain-server/src/main.cpp @@ -132,25 +132,25 @@ int main(int argc, const char * argv[]) agent++) { if (DEBUG_TO_SELF || - !(*agent).matches((sockaddr *)&agentPublicAddress, (sockaddr *)&agentLocalAddress, agentType)) { - if (memchr(SOLO_AGENT_TYPES, (*agent).getType(), sizeof(SOLO_AGENT_TYPES)) == NULL) { + !agent->matches((sockaddr *)&agentPublicAddress, (sockaddr *)&agentLocalAddress, agentType)) { + if (memchr(SOLO_AGENT_TYPES, agent->getType(), sizeof(SOLO_AGENT_TYPES)) == NULL) { // this is an agent of which there can be multiple, just add them to the packet // don't send avatar agents to other avatars, that will come from avatar mixer - if (agentType != AGENT_TYPE_AVATAR || (*agent).getType() != AGENT_TYPE_AVATAR) { - currentBufferPos = addAgentToBroadcastPacket(currentBufferPos, &(*agent)); + if (agentType != AGENT_TYPE_AVATAR || agent->getType() != AGENT_TYPE_AVATAR) { + currentBufferPos = addAgentToBroadcastPacket(currentBufferPos, &*agent); } } else { // solo agent, we need to only send newest - if (newestSoloAgents[(*agent).getType()] == NULL || - newestSoloAgents[(*agent).getType()]->getFirstRecvTimeUsecs() < (*agent).getFirstRecvTimeUsecs()) { + if (newestSoloAgents[agent->getType()] == NULL || + newestSoloAgents[agent->getType()]->getFirstRecvTimeUsecs() < agent->getFirstRecvTimeUsecs()) { // we have to set the newer solo agent to add it to the broadcast later - newestSoloAgents[(*agent).getType()] = &(*agent); + newestSoloAgents[agent->getType()] = &*agent; } } } else { // this is the agent, just update last receive to now - (*agent).setLastRecvTimeUsecs(usecTimestampNow()); + agent->setLastRecvTimeUsecs(usecTimestampNow()); } } diff --git a/interface/src/Avatar.cpp b/interface/src/Avatar.cpp index c5364c0029..ac69891b21 100644 --- a/interface/src/Avatar.cpp +++ b/interface/src/Avatar.cpp @@ -310,8 +310,8 @@ void Avatar::simulate(float deltaTime) { agent != agentList->end(); agent++) { - if ((*agent).getLinkedData() != NULL && (*agent).getType() == AGENT_TYPE_AVATAR) { - Avatar *otherAvatar = (Avatar *)(*agent).getLinkedData(); + if (agent->getLinkedData() != NULL && agent->getType() == AGENT_TYPE_AVATAR) { + Avatar *otherAvatar = (Avatar *)agent->getLinkedData(); // check for collisions with other avatars and respond updateAvatarCollisionDetectionAndResponse diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 131ff26c93..8fee0ee26a 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -913,8 +913,8 @@ void display(void) for(AgentList::iterator agent = agentList->begin(); agent != agentList->end(); agent++) { - if ((*agent).getLinkedData() != NULL && (*agent).getType() == AGENT_TYPE_AVATAR) { - Avatar *avatar = (Avatar *)(*agent).getLinkedData(); + if (agent->getLinkedData() != NULL && agent->getType() == AGENT_TYPE_AVATAR) { + Avatar *avatar = (Avatar *)agent->getLinkedData(); avatar->render(0); } } @@ -986,7 +986,7 @@ void display(void) int totalAvatars = 0, totalServers = 0; for (AgentList::iterator agent = agentList->begin(); agent != agentList->end(); agent++) { - (*agent).getType() == AGENT_TYPE_AVATAR ? totalAvatars++ : totalServers++; + agent->getType() == AGENT_TYPE_AVATAR ? totalAvatars++ : totalServers++; } sprintf(agents, "Servers: %d, Avatars: %d\n", totalServers, totalAvatars); @@ -1499,8 +1499,8 @@ void idle(void) { //loop through all the other avatars and simulate them... AgentList * agentList = AgentList::getInstance(); for(AgentList::iterator agent = agentList->begin(); agent != agentList->end(); agent++) { - if ((*agent).getLinkedData() != NULL) { - Avatar *avatar = (Avatar *)(*agent).getLinkedData(); + if (agent->getLinkedData() != NULL) { + Avatar *avatar = (Avatar *)agent->getLinkedData(); avatar->simulate(deltaTime); } } diff --git a/libraries/shared/src/AgentList.cpp b/libraries/shared/src/AgentList.cpp index dc46558766..908547e9ba 100644 --- a/libraries/shared/src/AgentList.cpp +++ b/libraries/shared/src/AgentList.cpp @@ -172,7 +172,7 @@ int AgentList::updateAgentWithData(Agent *agent, unsigned char *packetData, int Agent* AgentList::agentWithAddress(sockaddr *senderAddress) { for(AgentList::iterator agent = begin(); agent != end(); agent++) { - if ((*agent).getActiveSocket() != NULL && socketMatch((*agent).getActiveSocket(), senderAddress)) { + if (agent->getActiveSocket() != NULL && socketMatch(agent->getActiveSocket(), senderAddress)) { return &*agent; } } @@ -182,7 +182,7 @@ Agent* AgentList::agentWithAddress(sockaddr *senderAddress) { Agent* AgentList::agentWithID(uint16_t agentID) { for(AgentList::iterator agent = begin(); agent != end(); agent++) { - if ((*agent).getAgentId() == agentID) { + if (agent->getAgentId() == agentID) { return &*agent; } } @@ -230,7 +230,7 @@ bool AgentList::addOrUpdateAgent(sockaddr *publicSocket, sockaddr *localSocket, if (publicSocket != NULL) { for (agent = begin(); agent != end(); agent++) { - if ((*agent).matches(publicSocket, localSocket, agentType)) { + if (agent->matches(publicSocket, localSocket, agentType)) { // we already have this agent, stop checking break; } @@ -262,10 +262,10 @@ bool AgentList::addOrUpdateAgent(sockaddr *publicSocket, sockaddr *localSocket, return true; } else { - if ((*agent).getType() == AGENT_TYPE_AUDIO_MIXER || (*agent).getType() == AGENT_TYPE_VOXEL) { + if (agent->getType() == AGENT_TYPE_AUDIO_MIXER || agent->getType() == AGENT_TYPE_VOXEL) { // until the Audio class also uses our agentList, we need to update // the lastRecvTimeUsecs for the audio mixer so it doesn't get killed and re-added continously - (*agent).setLastRecvTimeUsecs(usecTimestampNow()); + agent->setLastRecvTimeUsecs(usecTimestampNow()); } // we had this agent already, do nothing for now @@ -292,9 +292,9 @@ void AgentList::addAgentToList(Agent* newAgent) { void AgentList::broadcastToAgents(unsigned char *broadcastData, size_t dataBytes, const char* agentTypes, int numAgentTypes) { for(AgentList::iterator agent = begin(); agent != end(); agent++) { // only send to the AgentTypes we are asked to send to. - if ((*agent).getActiveSocket() != NULL && memchr(agentTypes, (*agent).getType(), numAgentTypes)) { + if (agent->getActiveSocket() != NULL && memchr(agentTypes, agent->getType(), numAgentTypes)) { // we know which socket is good for this agent, send there - agentSocket.send((*agent).getActiveSocket(), broadcastData, dataBytes); + agentSocket.send(agent->getActiveSocket(), broadcastData, dataBytes); } } } @@ -303,11 +303,11 @@ void AgentList::handlePingReply(sockaddr *agentAddress) { for(AgentList::iterator agent = begin(); agent != end(); agent++) { // check both the public and local addresses for each agent to see if we find a match // prioritize the private address so that we prune erroneous local matches - if (socketMatch((*agent).getPublicSocket(), agentAddress)) { - (*agent).activatePublicSocket(); + if (socketMatch(agent->getPublicSocket(), agentAddress)) { + agent->activatePublicSocket(); break; - } else if (socketMatch((*agent).getLocalSocket(), agentAddress)) { - (*agent).activateLocalSocket(); + } else if (socketMatch(agent->getLocalSocket(), agentAddress)) { + agent->activateLocalSocket(); break; } } @@ -316,7 +316,7 @@ void AgentList::handlePingReply(sockaddr *agentAddress) { Agent* AgentList::soloAgentOfType(char agentType) { if (memchr(SOLO_AGENT_TYPES, agentType, sizeof(SOLO_AGENT_TYPES)) != NULL) { for(AgentList::iterator agent = begin(); agent != end(); agent++) { - if ((*agent).getType() == agentType) { + if (agent->getType() == agentType) { return &*agent; } } @@ -338,12 +338,12 @@ void *pingUnknownAgents(void *args) { for(AgentList::iterator agent = agentList->begin(); agent != agentList->end(); agent++) { - if ((*agent).getActiveSocket() == NULL - && ((*agent).getPublicSocket() != NULL && (*agent).getLocalSocket() != NULL)) { + if (agent->getActiveSocket() == NULL + && (agent->getPublicSocket() != NULL && agent->getLocalSocket() != NULL)) { // ping both of the sockets for the agent so we can figure out // which socket we can use - agentList->getAgentSocket().send((*agent).getPublicSocket(), &PACKET_HEADER_PING, 1); - agentList->getAgentSocket().send((*agent).getLocalSocket(), &PACKET_HEADER_PING, 1); + agentList->getAgentSocket().send(agent->getPublicSocket(), &PACKET_HEADER_PING, 1); + agentList->getAgentSocket().send(agent->getLocalSocket(), &PACKET_HEADER_PING, 1); } } @@ -375,13 +375,13 @@ void *removeSilentAgents(void *args) { for(AgentList::iterator agent = agentList->begin(); agent != agentList->end(); ++agent) { - if ((checkTimeUSecs - (*agent).getLastRecvTimeUsecs()) > AGENT_SILENCE_THRESHOLD_USECS - && (*agent).getType() != AGENT_TYPE_VOXEL) { + if ((checkTimeUSecs - agent->getLastRecvTimeUsecs()) > AGENT_SILENCE_THRESHOLD_USECS + && agent->getType() != AGENT_TYPE_VOXEL) { printLog("Killing agent - "); Agent::printLog(*agent); - (*agent).setAlive(false); + agent->setAlive(false); } } @@ -504,6 +504,11 @@ Agent& AgentListIterator::operator*() { return *agentBucket[_agentIndex % AGENTS_PER_BUCKET]; } +Agent* AgentListIterator::operator->() { + Agent** agentBucket = _agentList->_agentBuckets[_agentIndex / AGENTS_PER_BUCKET]; + return agentBucket[_agentIndex % AGENTS_PER_BUCKET]; +} + AgentListIterator& AgentListIterator::operator++() { skipDeadAndStopIncrement(); return *this; diff --git a/libraries/shared/src/AgentList.h b/libraries/shared/src/AgentList.h index c94b69131c..92a80ddc08 100644 --- a/libraries/shared/src/AgentList.h +++ b/libraries/shared/src/AgentList.h @@ -121,6 +121,7 @@ public: bool operator!= (const AgentListIterator& otherValue); Agent& operator*(); + Agent* operator->(); AgentListIterator& operator++(); AgentListIterator operator++(int); diff --git a/voxel-server/src/main.cpp b/voxel-server/src/main.cpp index 91e91d81a7..9be9611048 100644 --- a/voxel-server/src/main.cpp +++ b/voxel-server/src/main.cpp @@ -127,7 +127,7 @@ void eraseVoxelTreeAndCleanupAgentVisitData() { //printf("eraseVoxelTreeAndCleanupAgentVisitData() agent[%d]\n",i); - VoxelAgentData *agentData = (VoxelAgentData *)(*agent).getLinkedData(); + VoxelAgentData *agentData = (VoxelAgentData *)agent->getLinkedData(); // clean up the agent visit data delete agentData->rootMarkerNode; @@ -155,7 +155,7 @@ void *distributeVoxelsToListeners(void *args) { // enumerate the agents to send 3 packets to each for (AgentList::iterator agent = agentList->begin(); agent != agentList->end(); agent++) { - VoxelAgentData *agentData = (VoxelAgentData *)(*agent).getLinkedData(); + VoxelAgentData *agentData = (VoxelAgentData *)agent->getLinkedData(); ViewFrustum viewFrustum; // get position and orientation details from the camera @@ -191,7 +191,7 @@ void *distributeVoxelsToListeners(void *args) { ::viewFrustumCulling, stopOctal); - agentList->getAgentSocket().send((*agent).getActiveSocket(), voxelPacket, voxelPacketEnd - voxelPacket); + agentList->getAgentSocket().send(agent->getActiveSocket(), voxelPacket, voxelPacketEnd - voxelPacket); packetCount++; totalBytesSent += voxelPacketEnd - voxelPacket;