1 /*
2  * Copyright (c) 2012-2019 The ANTLR Project. All rights reserved.
3  * Use of this file is governed by the BSD 3-clause license that
4  * can be found in the LICENSE.txt file in the project root.
5  */
6 
7 module antlr.v4.runtime.ReplaceOp;
8 
9 import antlr.v4.runtime.RewriteOperation;
10 import std.conv;
11 import std.format;
12 import std.variant;
13 
14 /**
15  * I'm going to try replacing range from x..y with (y-x)+1 ReplaceOp
16  *  instructions.
17  */
18 class ReplaceOp : RewriteOperation
19 {
20 
21     public size_t lastIndex;
22 
23     public this(size_t from, size_t to, Variant text)
24     {
25         super(from, text);
26         lastIndex = to;
27     }
28 
29     /**
30      * @uml
31      * @override
32      */
33     public override size_t execute(ref Variant buf)
34     {
35         Variant Null; // only for compare
36         if (text !is Null) {
37             buf is Null ? buf = text : (buf ~= text);
38         }
39         return lastIndex+1;
40     }
41 
42     /**
43      * @uml
44      * @override
45      */
46     public override string toString()
47     {
48         Variant Null;
49         if (text is Null)
50             {
51                 return format("<DeleteOp@%s..%s>", tokens.get(to!int(index)),
52                               tokens.get(to!int(lastIndex)));
53             }
54         return format("<ReplaceOp@%s..%s:\"%s\">", tokens.get(to!int(index)),
55                       tokens.get(to!int(lastIndex)), text);
56     }
57 
58 }