Mono.Debugger.Languages.BitfieldTargetLocation.ReadMemory C# (CSharp) Method

ReadMemory() private method

private ReadMemory ( TargetMemoryAccess target, int size ) : TargetBlob
target TargetMemoryAccess
size int
return TargetBlob
        internal override TargetBlob ReadMemory(TargetMemoryAccess target, int size)
        {
            byte[] data = relative_to.ReadBuffer (target, size);

            int total_size = 8 * data.Length;
            bool[] bit_data = new bool [total_size];
            bool[] target_bits = new bool [total_size];

            // FIXME
            bool is_bigendian = false;

            int bit_pos = 0;
            for (int i = 0; i < data.Length; i++) {
                byte current = data [i];
                for (int j = 0; j < 8; j++)
                    bit_data [bit_pos++] = (current & (1 << j)) != 0;
            }

            bit_pos = 0;
            if (!is_bigendian)
                bit_offset = total_size - bit_offset - bit_size;

            for (int i = bit_offset; i < bit_offset + bit_size; i++)
                target_bits [bit_pos++] = bit_data [i];

            byte[] blob = new byte [data.Length];
            bit_pos = 0;
            for (int i = 0; i < blob.Length; i++) {
                int current = 0;
                for (int j = 0; j < 8; j++) {
                    if (target_bits [bit_pos++])
                        current |= 1 << j;
                }
                blob [i] = (byte) current;
            }

            return new TargetBlob (blob, target.TargetMemoryInfo);
        }