void OldNoiseBuffer::create(const OldNoiseParams ¶m, double first_x, double first_y, double first_z, double last_x, double last_y, double last_z, double samplelength_x, double samplelength_y, double samplelength_z) { clear(); m_start_x = first_x - samplelength_x; m_start_y = first_y - samplelength_y; m_start_z = first_z - samplelength_z; m_samplelength_x = samplelength_x; m_samplelength_y = samplelength_y; m_samplelength_z = samplelength_z; m_size_x = (last_x - m_start_x)/samplelength_x + 2; m_size_y = (last_y - m_start_y)/samplelength_y + 2; m_size_z = (last_z - m_start_z)/samplelength_z + 2; m_data = new double[m_size_x*m_size_y*m_size_z]; for(int x=0; x<m_size_x; x++) for(int y=0; y<m_size_y; y++) for(int z=0; z<m_size_z; z++) { double xd = (m_start_x + (double)x*m_samplelength_x); double yd = (m_start_y + (double)y*m_samplelength_y); double zd = (m_start_z + (double)z*m_samplelength_z); double a = noise3d_param(param, xd,yd,zd); intSet(x,y,z, a); } }
bool I2CController::step(I2COp** result) { bool processing = true; *result = NULL; while (processing) { switch (state) { default: case I2C_STATE_ERROR: state = I2C_STATE_START; return true; case I2C_STATE_START_WAIT: case I2C_STATE_WRITE_ADDR_WAIT: case I2C_STATE_WRITE_DATA_WAIT: case I2C_STATE_READ_DATA_WAIT: if (intSet()) { state = (I2CState) (state + 1); } else { processing = false; } break; case I2C_STATE_START: if (pendingOps.getSize() > 0) { sendStart(); state = I2C_STATE_START_WAIT; } else { processing = false; } break; case I2C_STATE_START_RESPONSE: switch (TW_STATUS) { case TW_REP_START: case TW_START: state = I2C_STATE_WRITE_ADDR; break; case TW_MT_ARB_LOST: state = I2C_STATE_START; break; default: state = I2C_STATE_ERROR; break; } break; case I2C_STATE_WRITE_ADDR: writeByte( (pendingOps.peek()->addr << 1) | (pendingOps.peek()->write ? TW_WRITE : TW_READ)); state = I2C_STATE_WRITE_ADDR_WAIT; break; case I2C_STATE_WRITE_ADDR_RESPONSE: switch (TW_STATUS) { case TW_MT_SLA_ACK: case TW_MR_SLA_ACK: state = pendingOps.peek()->write ? I2C_STATE_WRITE_DATA : I2C_STATE_READ_DATA; break; case TW_MT_SLA_NACK: case TW_MR_SLA_NACK: case TW_MT_ARB_LOST: state = I2C_STATE_START; break; default: state = I2C_STATE_ERROR; break; } break; case I2C_STATE_WRITE_DATA: if (!pendingOps.getSize()) { state = I2C_STATE_START; } else if (!pendingOps.peek()->data.getSize()) { state = I2C_STATE_DATA_DONE; } else { writeByte(pendingOps.peek()->data.peek()); state = I2C_STATE_WRITE_DATA_WAIT; } break; case I2C_STATE_WRITE_DATA_RESPONSE: switch (TW_STATUS) { case TW_MT_DATA_ACK: pendingOps.peek()->data.dequeue(); state = I2C_STATE_WRITE_DATA; break; case TW_MT_DATA_NACK: case TW_MT_ARB_LOST: state = I2C_STATE_DATA_DONE; break; default: state = I2C_STATE_ERROR; break; } break; case I2C_STATE_READ_DATA: if (pendingOps.peek()->data.full()) { state = I2C_STATE_DATA_DONE; } else { requestByte( pendingOps.peek()->data.getSize() != pendingOps.peek()->data.getBufferSize() - 1); state = I2C_STATE_READ_DATA_WAIT; } break; case I2C_STATE_READ_DATA_RESPONSE: switch (TW_STATUS) { case TW_MR_DATA_ACK: pendingOps.peek()->data.enqueue(readByte()); state = I2C_STATE_READ_DATA; break; case TW_MR_DATA_NACK: pendingOps.peek()->data.enqueue(readByte()); state = I2C_STATE_DATA_DONE; break; default: state = I2C_STATE_ERROR; break; } break; case I2C_STATE_DATA_DONE: pendingOps.dequeue(result); case I2C_STATE_CLOSE: if (!pendingOps.getSize()) sendClose(); if (state == I2C_STATE_DATA_DONE) { state = I2C_STATE_START; return true; } else { state = I2C_STATE_START; break; } } } return false; }