Ejemplo n.º 1
0
int main() {
	UNDO *undo;
	unsigned char *a;

	assert((undo = undo_new()) != NULL);
	assert(undo_set_memory_limit(undo, 1024 * 1024) == UNDO_NOERROR);

	a = undo_malloc(undo, 42);
	assert(a != NULL);
	memset(a, 0x42, 42);
	assert(undo_get_undo_count(undo) == 0);
	assert(undo_get_redo_count(undo) == 0);
	assert(undo_snapshot(undo) == UNDO_NOERROR);
	assert(undo_get_undo_count(undo) == 0);
	assert(undo_get_redo_count(undo) == 0);
	assert(a[1] == 0x42);
	memset(a, 0x24, 42);
	assert(undo_snapshot(undo) == UNDO_NOERROR);
	assert(undo_get_undo_count(undo) == 1);
	assert(undo_get_redo_count(undo) == 0);
	assert(a[2] == 0x24);
	memset(a, 0x14, 42);
	assert(undo_snapshot(undo) == UNDO_NOERROR);
	assert(undo_get_undo_count(undo) == 2);
	assert(undo_get_redo_count(undo) == 0);

	assert(undo_undo(undo) == UNDO_NOERROR);
	assert(undo_get_undo_count(undo) == 1);
	assert(undo_get_redo_count(undo) == 1);
	assert(a[3] == 0x24);
	assert(undo_undo(undo) == UNDO_NOERROR);
	assert(undo_get_undo_count(undo) == 0);
	assert(undo_get_redo_count(undo) == 2);
	assert(a[4] == 0x42);
	assert(undo_undo(undo) != UNDO_NOERROR);
	assert(undo_redo(undo) == UNDO_NOERROR);
	assert(a[5] == 0x24);
	assert(undo_redo(undo) == UNDO_NOERROR);
	assert(a[6] == 0x14);
	assert(undo_redo(undo) != UNDO_NOERROR);

	assert(undo_undo(undo) == UNDO_NOERROR);
	assert(a[3] == 0x24);
	assert(a[2] == 0x24);
	memset(a, 0x04, 42);
	assert(undo_snapshot(undo) == UNDO_NOERROR);
	assert(undo_undo(undo) == UNDO_NOERROR);
	assert(a[3] == 0x14);
	assert(undo_undo(undo) == UNDO_NOERROR);
	assert(a[3] == 0x24);
	assert(undo_undo(undo) == UNDO_NOERROR);
	assert(a[3] == 0x42);
	assert(undo_undo(undo) != UNDO_NOERROR);

	assert(undo_destroy(undo) == UNDO_NOERROR);

	return 0;
}
Ejemplo n.º 2
0
Position* File::undo(Kontext* kontext)
      {
      Undo* undo = (undo_list.cur_undo == undo_list.begin())
        ? 0 : *--(undo_list.cur_undo);
      if (undo == 0 || undo->type == UNDO_NOTHING)
            return 0;
      undo_redo(kontext, undo);
      Position tmp(*(undo->start_pos));
      *(undo->end_pos) = *(undo->start_pos);
      *(undo->start_pos) = tmp;
      return undo->end_pos;
      }
Ejemplo n.º 3
0
 void redo()
   {
     undo_redo(m_redo_stack, m_undo_stack, false);
   }
Ejemplo n.º 4
0
 void undo()
   {
     undo_redo(m_undo_stack, m_redo_stack, true);
   }