Thread* ThreadLocalAllocBuffer::myThread() { #ifdef COLORED_TLABS if (UseColoredSpaces) { return (Thread*)(((char *)this) + in_bytes(start_offset()) - in_bytes(Thread::colored_tlab_start_offset(_color))); } else { return (Thread*)(((char *)this) + in_bytes(start_offset()) - in_bytes(Thread::tlab_start_offset())); } #else return (Thread*)(((char *)this) + in_bytes(start_offset()) - in_bytes(Thread::tlab_start_offset())); #endif }
std::pair< std::size_t, int > Connection::read(std::vector< char > & buffer) { AGELENA_DEBUG_1("std::pair< std::size_t, int > Connection(%1%)::read(std::vector< char > & buffer)", this); boost::recursive_mutex::scoped_lock sentinel(bio_lock_); if (!bio_) throw Exceptions::Connection::UnusableConnection(); else { /* all is well */ } std::size_t bytes_read_into_buffer(0); int reason(no_error__); bool continue_until_retry(false); std::vector< char >::size_type start_offset(0); if (buffer.empty()) { continue_until_retry = true; buffer.resize(default_read_block_size__); } else { /* no special handling here */ } read_entry_point: const std::size_t bytes_requested(buffer.size() - start_offset); assert(bytes_requested < INT_MAX); int bytes_read(bio_->read(&(buffer[start_offset]), bytes_requested)); if (bytes_read < static_cast< int >(bytes_requested)) { bytes_read_into_buffer += bytes_read; if (!bio_->shouldRetry() && bytes_read <= 0) { throw Exceptions::Connection::ConnectionClosed(); } else { reason |= should_retry__; if (bio_->shouldRead()) reason |= should_read__; else { /* no reading requested */ } if (bio_->shouldWrite()) reason |= should_write__; else { /* no write requested */ } } } else if (continue_until_retry) { bytes_read_into_buffer = buffer.size(); start_offset = buffer.size(); buffer.resize(buffer.size() + default_read_block_size__); goto read_entry_point; } else { bytes_read_into_buffer = buffer.size(); } return std::make_pair(bytes_read_into_buffer, reason); }
/** Saves the current kart position as initial starting position for the * camera. */ void Camera::setInitialTransform() { if (m_kart == NULL) return; Vec3 start_offset(0, 1.6f, -3); Vec3 current_position = m_kart->getTrans()(start_offset); m_camera->setPosition( current_position.toIrrVector()); // Reset the target from the previous target (in case of a restart // of a race) - otherwise the camera will initially point in the wrong // direction till smoothMoveCamera has corrected this. Setting target // to position doesn't make sense, but smoothMoves will adjust the // value before the first frame is rendered m_camera->setTarget(m_camera->getPosition()); m_camera->setRotation(core::vector3df(0, 0, 0)); m_camera->setRotation( core::vector3df( 0.0f, 0.0f, 0.0f ) ); m_camera->setFOV(m_fov); assert(!isnan(m_camera->getPosition().X)); assert(!isnan(m_camera->getPosition().Y)); assert(!isnan(m_camera->getPosition().Z)); } // setInitialTransform
/** Sets the mode of the camera. * \param mode Mode the camera should be switched to. */ void Camera::setMode(Mode mode) { // If we switch from reverse view, move the camera immediately to the // correct position. if((m_mode==CM_REVERSE && mode==CM_NORMAL) || (m_mode==CM_FALLING && mode==CM_NORMAL)) { Vec3 start_offset(0, 1.6f, -3); Vec3 current_position = m_kart->getTrans()(start_offset); m_camera->setPosition( current_position.toIrrVector()); m_camera->setTarget(m_camera->getPosition()); } if(mode==CM_FINAL) { if(m_end_cameras.size()>0) m_camera->setPosition(m_end_cameras[0].m_position.toIrrVector()); m_next_end_camera = m_end_cameras.size()>1 ? 1 : 0; m_current_end_camera = 0; m_camera->setFOV(m_fov); handleEndCamera(0); } // mode==CM_FINAL m_mode = mode; } // setMode
Thread* ThreadLocalAllocBuffer::myThread() { return (Thread*)(((char *)this) + in_bytes(start_offset()) - in_bytes(Thread::tlab_start_offset())); }