view 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
line source
1 // Sedgewick and Wayne, Algorithms, 4th ed. problem 1.3.44
3 // I would never use this in real life. It's far too inefficient.
5 #include "Buffer.hpp"
7 Buffer::Buffer( void ) :
8 cursor (0),
9 use_s1 (true)
10 {
11 }
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 }
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 }
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 }
61 if ( cursor > size() )
62 cursor = size();
63 }
65 void Buffer::left( size_t k ) {
66 if ( cursor < k )
67 cursor = 0;
68 else
69 cursor -= k;
70 }
72 void Buffer::right( size_t k ) {
73 if ( size() - cursor < k )
74 cursor = size();
75 else
76 cursor += k;
77 }
79 size_t Buffer::size( void ) {
80 if ( use_s1 )
81 return s1.size();
82 else
83 return s2.size();
84 }