Mercurial > Algorithms__Sedgewick
comparison algs4-c++/src/Buffer.cpp @ 22:c2cbfdf528f6
1.3.44 Ugh. I would never use this in real life but it seems to be what they want.
author | Eris Caffee <discordia@eldalin.com> |
---|---|
date | Tue, 23 Jun 2015 11:02:31 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:e05789320d8b |
---|---|
1 // Sedgewick and Wayne, Algorithms, 4th ed. problem 1.3.44 | |
2 | |
3 // I would never use this in real life. It's far too inefficient. | |
4 | |
5 #include "Buffer.hpp" | |
6 | |
7 Buffer::Buffer( void ) : | |
8 cursor (0), | |
9 use_s1 (true) | |
10 { | |
11 } | |
12 | |
13 void Buffer::insert( char c ) { | |
14 if ( use_s1 ) { | |
15 size_t i = 0; | |
16 size_t max = s1.size(); | |
17 while ( i != cursor ) | |
18 s2.push( s1.pop() ); | |
19 s2.push( c ); | |
20 while ( i < max ) | |
21 s2.push( s1.pop() ); | |
22 } | |
23 else { | |
24 size_t i = 0; | |
25 size_t max = s2.size(); | |
26 while ( i != cursor ) | |
27 s1.push( s2.pop() ); | |
28 s1.push( c ); | |
29 while ( i < max ) | |
30 s1.push( s2.pop() ); | |
31 } | |
32 } | |
33 | |
34 char Buffer::get( void ) { | |
35 if ( use_s1 ) | |
36 return s1.find( cursor ); // Need to add overloaded T find( size_t k) to Stack | |
37 else | |
38 return s2.find( cursor ); | |
39 } | |
40 | |
41 char Buffer::delete( void ) { | |
42 if ( use_s1 ) { | |
43 size_t i = 0; | |
44 size_t max = s1.size(); | |
45 while ( i != cursor ) | |
46 s2.push( s1.pop() ); | |
47 ++i; | |
48 while ( i < max ) | |
49 s2.push( s1.pop() ); | |
50 } | |
51 else { | |
52 size_t i = 0; | |
53 size_t max = s2.size(); | |
54 while ( i != cursor ) | |
55 s1.push( s2.pop() ); | |
56 ++i; | |
57 while ( i < max ) | |
58 s1.push( s2.pop() ); | |
59 } | |
60 | |
61 if ( cursor > size() ) | |
62 cursor = size(); | |
63 } | |
64 | |
65 void Buffer::left( size_t k ) { | |
66 if ( cursor < k ) | |
67 cursor = 0; | |
68 else | |
69 cursor -= k; | |
70 } | |
71 | |
72 void Buffer::right( size_t k ) { | |
73 if ( size() - cursor < k ) | |
74 cursor = size(); | |
75 else | |
76 cursor += k; | |
77 } | |
78 | |
79 size_t Buffer::size( void ) { | |
80 if ( use_s1 ) | |
81 return s1.size(); | |
82 else | |
83 return s2.size(); | |
84 } |