-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCursor.hpp
More file actions
121 lines (82 loc) · 1.22 KB
/
Cursor.hpp
File metadata and controls
121 lines (82 loc) · 1.22 KB
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#ifndef CURSOR_HPP
#define CURSOR_HPP
#include "pila_enla.hpp" //dinamic_queue
#include<iostream>
class Cursor
{
public:
Cursor();
void forward();
void back();
void beginnin();
void end();
void del();
void del_backspace();
void insert(const char);
void in_overwrite(const char);
private:
struct Line
{
Pila<char> lft;
Pila<char> rgt;
bool empty (){return lft.vacia()&& rgt.vacia();}
};
Line l_;
};
// inline functions
inline Cursor::Cursor():l_{}{}
inline void Cursor::forward()
{
if(!l_.rgt.vacia())
{
l_.lft.push(l_.rgt.tope());
l_.rgt.pop();
}
}
inline void Cursor::back()
{
if(!l_.empty())
{
l_.rgt.push(l_.lft.tope());
l_.lft.pop();
}
}
inline void Cursor::del()
{
if(!l_.lft.vacia())
l_.lft.pop();
}
inline void Cursor::del_backspace()
{
back();
del();
forward();
}
inline void Cursor::insert(const char c)
{
l_.lft.push(c);
}
inline void Cursor::in_overwrite(const char c)
{
if(!l_.empty())
{
l_.rgt.pop();
l_.rgt.push(c);
}
else
l_.rgt.push(c);
}
void Cursor::beginning()
{
while(!l_.lft.vacia())
back();
}
void Cursor::end()
{
while(!l_.rgt.vacia())
forward();
}
/*
std::ostream& operator <<(std::ostream&,const Cursor& )
*/
#endif // cursor_HPP