/// <summary> /// Iterate over all labels in the label buffer. /// </summary> /// <param name="consumer"> function to be called for each label. </param> public void ForEach(IntObjConsumer <string> consumer) { var counterId = 0; for (int i = 0, capacity = MetaDataBuffer.Capacity; i < capacity; i += METADATA_LENGTH) { var recordStatus = MetaDataBuffer.GetIntVolatile(i); if (RECORD_UNUSED == recordStatus) { break; } else if (RECORD_ALLOCATED == recordStatus) { var label = MetaDataBuffer.GetStringUtf8(i + LABEL_OFFSET); consumer(counterId, label); } counterId++; } }
/// <summary> /// Iterate over all the metadata in the buffer. /// </summary> /// <param name="metaData"> function to be called for each metadata record. </param> public void ForEach(MetaData metaData) { var counterId = 0; for (int i = 0, capacity = MetaDataBuffer.Capacity; i < capacity; i += METADATA_LENGTH) { var recordStatus = MetaDataBuffer.GetIntVolatile(i); if (RECORD_UNUSED == recordStatus) { break; } if (RECORD_ALLOCATED == recordStatus) { var typeId = MetaDataBuffer.GetInt(i + TYPE_ID_OFFSET); var label = MetaDataBuffer.GetStringUtf8(i + LABEL_OFFSET); IDirectBuffer keyBuffer = new UnsafeBuffer(MetaDataBuffer, i + KEY_OFFSET, MAX_KEY_LENGTH); metaData(counterId, typeId, keyBuffer, label); } counterId++; } }