Make Terminal::Framebuffer::Rows shared and copy-on-write.

* Support both std:: and std::tr1:: shared_ptr. FreeBSD 10 now uses C++11 by default.
* Remove Framebuffer pointers in STMClient
This commit is contained in:
John Hood
2014-06-14 18:21:38 -04:00
parent c090d257f2
commit b41bad918d
8 changed files with 186 additions and 83 deletions
+10 -13
View File
@@ -237,11 +237,11 @@ void STMClient::main_init( void )
}
/* local state */
local_framebuffer = new Terminal::Framebuffer( window_size.ws_col, window_size.ws_row );
new_state = new Terminal::Framebuffer( 1, 1 );
local_framebuffer = Terminal::Framebuffer( window_size.ws_col, window_size.ws_row );
new_state = Terminal::Framebuffer( 1, 1 );
/* initialize screen */
string init = display.new_frame( false, *local_framebuffer, *local_framebuffer );
string init = display.new_frame( false, local_framebuffer, local_framebuffer );
swrite( STDOUT_FILENO, init.data(), init.size() );
/* open network */
@@ -263,26 +263,23 @@ void STMClient::output_new_frame( void )
}
/* fetch target state */
*new_state = network->get_latest_remote_state().state.get_fb();
new_state = network->get_latest_remote_state().state.get_fb();
/* apply local overlays */
overlays.apply( *new_state );
overlays.apply( new_state );
/* apply any mutations */
display.downgrade( *new_state );
display.downgrade( new_state );
/* calculate minimal difference from where we are */
const string diff( display.new_frame( !repaint_requested,
*local_framebuffer,
*new_state ) );
local_framebuffer,
new_state ) );
swrite( STDOUT_FILENO, diff.data(), diff.size() );
repaint_requested = false;
/* switch pointers */
Terminal::Framebuffer *tmp = new_state;
new_state = local_framebuffer;
local_framebuffer = tmp;
local_framebuffer = new_state;
}
void STMClient::process_network_input( void )
@@ -318,7 +315,7 @@ bool STMClient::process_user_input( int fd )
for ( int i = 0; i < bytes_read; i++ ) {
char the_byte = buf[ i ];
overlays.get_prediction_engine().new_user_byte( the_byte, *local_framebuffer );
overlays.get_prediction_engine().new_user_byte( the_byte, local_framebuffer );
if ( quit_sequence_started ) {
if ( the_byte == '.' ) { /* Quit sequence is Ctrl-^ . */
+3 -11
View File
@@ -58,7 +58,7 @@ private:
struct winsize window_size;
Terminal::Framebuffer *local_framebuffer, *new_state;
Terminal::Framebuffer local_framebuffer, new_state;
Overlay::OverlayManager overlays;
Network::Transport< Network::UserStream, Terminal::Complete > *network;
Terminal::Display display;
@@ -89,8 +89,8 @@ public:
escape_requires_lf( false ), escape_key_help( L"?" ),
saved_termios(), raw_termios(),
window_size(),
local_framebuffer( NULL ),
new_state( NULL ),
local_framebuffer( 1, 1 ),
new_state( 1, 1 ),
overlays(),
network( NULL ),
display( true ), /* use TERM environment var to initialize display */
@@ -122,14 +122,6 @@ public:
~STMClient()
{
if ( local_framebuffer != NULL ) {
delete local_framebuffer;
}
if ( new_state != NULL ) {
delete new_state;
}
if ( network != NULL ) {
delete network;
}