// Header write for write operations. func (cmd *baseCommand) writeHeaderWithPolicy(policy *WritePolicy, readAttr int, writeAttr int, fieldCount int, operationCount int) { // Set flags. generation := int32(0) infoAttr := 0 switch policy.RecordExistsAction { case UPDATE: case UPDATE_ONLY: infoAttr |= _INFO3_UPDATE_ONLY case REPLACE: infoAttr |= _INFO3_CREATE_OR_REPLACE case REPLACE_ONLY: infoAttr |= _INFO3_REPLACE_ONLY case CREATE_ONLY: writeAttr |= _INFO2_CREATE_ONLY } switch policy.GenerationPolicy { case NONE: case EXPECT_GEN_EQUAL: generation = policy.Generation writeAttr |= _INFO2_GENERATION case EXPECT_GEN_GT: generation = policy.Generation writeAttr |= _INFO2_GENERATION_GT } if policy.CommitLevel == COMMIT_MASTER { infoAttr |= _INFO3_COMMIT_MASTER } if policy.ConsistencyLevel == CONSISTENCY_ALL { readAttr |= _INFO1_CONSISTENCY_ALL } // Write all header data except total size which must be written last. cmd.dataBuffer[8] = _MSG_REMAINING_HEADER_SIZE // Message header length. cmd.dataBuffer[9] = byte(readAttr) cmd.dataBuffer[10] = byte(writeAttr) cmd.dataBuffer[11] = byte(infoAttr) cmd.dataBuffer[12] = 0 // unused cmd.dataBuffer[13] = 0 // clear the result code Buffer.Int32ToBytes(generation, cmd.dataBuffer, 14) Buffer.Int32ToBytes(policy.Expiration, cmd.dataBuffer, 18) // Initialize timeout. It will be written later. cmd.dataBuffer[22] = 0 cmd.dataBuffer[23] = 0 cmd.dataBuffer[24] = 0 cmd.dataBuffer[25] = 0 Buffer.Int16ToBytes(int16(fieldCount), cmd.dataBuffer, 26) Buffer.Int16ToBytes(int16(operationCount), cmd.dataBuffer, 28) cmd.dataOffset = int(_MSG_TOTAL_HEADER_SIZE) }
// Generic header write. func (cmd *baseCommand) writeHeader(policy *BasePolicy, readAttr int, writeAttr int, fieldCount int, operationCount int) { if policy.ConsistencyLevel == CONSISTENCY_ALL { readAttr |= _INFO1_CONSISTENCY_ALL } // Write all header data except total size which must be written last. cmd.dataBuffer[8] = _MSG_REMAINING_HEADER_SIZE // Message header length. cmd.dataBuffer[9] = byte(readAttr) cmd.dataBuffer[10] = byte(writeAttr) for i := 11; i < 26; i++ { cmd.dataBuffer[i] = 0 } Buffer.Int16ToBytes(int16(fieldCount), cmd.dataBuffer, 26) Buffer.Int16ToBytes(int16(operationCount), cmd.dataBuffer, 28) cmd.dataOffset = int(_MSG_TOTAL_HEADER_SIZE) }
func (pckr *packer) PackShort(valType int, val int16) { pckr.buffer.WriteByte(byte(valType)) pos := pckr.grow(_b2) Buffer.Int16ToBytes(val, pckr.buffer.Bytes(), pos) }