summaryrefslogtreecommitdiff
path: root/diff-lcs/tags/release-1.0.1/lib/diff/lcs/change.rb
blob: a472f26edd5814605c1cb9989b6ed450f6ea00fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#! /usr/env/bin ruby
#--
# Copyright 2004 Austin Ziegler <diff-lcs@halostatue.ca>
#   adapted from:
#     Algorithm::Diff (Perl) by Ned Konz <perl@bike-nomad.com>
#     Smalltalk by Mario I. Wolczko <mario@wolczko.com>
#   implements McIlroy-Hunt diff algorithm
#
# This program is free software. It may be redistributed and/or modified under
# the terms of the GPL version 2 (or later), the Perl Artistic licence, or the
# Ruby licence.
# 
# $Id$
#++

class Diff::LCS::Change
  attr_reader :action, :position, :text

  include Comparable

  def ==(other)
    (self.action == other.action) and
    (self.position == other.position) and
    (self.text == other.text)
  end

  def <=>(other)
    r = self.action <=> other.action
    r = self.position <=> other.position if r.zero?
    r = self.text <=> other.text if r.zero?
    r
  end

  def initialize(action, position, text)
    @action = action
    @position = position
    @text = text
  end

  def to_a
    [@action, @position, @text]
  end

  def self.from_a(*arr)
    Diff::LCS::Change.new(arr[0], arr[1], arr[2])
  end

  def deleting?
    @action == :-
  end

  def adding?
    @action == :+
  end

  def unchanged?
    @action == :u
  end

  def changed?
    @changed == :c
  end
end