Sha256: 27c01137aaceccd771c8e3a9fd603f59c7a575567d83067555d98e9589bef122

Contents?: true

Size: 1.27 KB

Versions: 5

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2010, by Jari Bakken.
# Copyright, 2012, by Hal Brodigan.
# Copyright, 2013-2022, by Samuel Williams.
# Copyright, 2013, by Garry Marshall.
# Copyright, 2014, by Masahiro Sano.

require_relative 'lib/source_range'

module FFI
	module Clang
		class SourceRange
			def self.null_range
				SourceRange.new Lib.get_null_range
			end

			def initialize(range_or_begin_location, end_location = nil)
				if end_location.nil?
					@range = range_or_begin_location
				else
					@range = Lib.get_range(range_or_begin_location.location, end_location.location)
				end
			end

			def start
				@start ||= ExpansionLocation.new(Lib.get_range_start @range)
			end

			def end
				@end ||= ExpansionLocation.new(Lib.get_range_end @range)
			end

			# The size, in bytes, of the source range.
			def bytesize
				self.end.offset - self.start.offset
			end

			# Read the part of the source file referred to by this source range.
			def text
				::File.open(self.start.file, "r") do |file|
					file.seek(self.start.offset)
					return file.read(self.bytesize)
				end
			end

			def null?
				Lib.range_is_null(@range) != 0
			end

			attr_reader :range

			def ==(other)
				Lib.equal_range(@range, other.range) != 0
			end
		end
	end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ffi-clang-0.12.0 lib/ffi/clang/source_range.rb
ffi-clang-0.11.0 lib/ffi/clang/source_range.rb
ffi-clang-0.10.0 lib/ffi/clang/source_range.rb
ffi-clang-0.9.0 lib/ffi/clang/source_range.rb
ffi-clang-0.8.0 lib/ffi/clang/source_range.rb