changeset 7084:8ada882c7c69

[project @ 2007-10-31 14:52:08 by jwe]
author jwe
date Wed, 31 Oct 2007 14:53:15 +0000
parents 24fde8abfb90
children 607b70017dab
files src/ChangeLog src/Makefile.in src/debug.h
diffstat 3 files changed, 146 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Wed Oct 31 02:12:16 2007 +0000
+++ b/src/ChangeLog	Wed Oct 31 14:53:15 2007 +0000
@@ -1,3 +1,7 @@
+2007-10-31  John W. Eaton  <jwe@octave.org>
+
+	* Makefile.in (INCLUDES): Add debug.h to the list.
+
 2007-10-30  John Swensen  <jpswensen@comcast.net>
 
 	* debug.h: New file.
--- a/src/Makefile.in	Wed Oct 31 02:12:16 2007 +0000
+++ b/src/Makefile.in	Wed Oct 31 14:53:15 2007 +0000
@@ -113,7 +113,7 @@
 	pt-pr-code.h pt-select.h pt-stmt.h pt-unop.h pt-walk.h \
 
 INCLUDES := Cell.h base-list.h c-file-ptr-stream.h comment-list.h \
-	defun-dld.h defun-int.h defun.h dirfns.h dynamic-ld.h \
+	debug.h defun-dld.h defun-int.h defun.h dirfns.h dynamic-ld.h \
 	error.h file-io.h gripes.h help.h input.h \
 	lex.h load-path.h load-save.h ls-hdf5.h ls-mat-ascii.h ls-mat4.h \
 	ls-mat5.h ls-oct-ascii.h ls-oct-binary.h ls-utils.h \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/debug.h	Wed Oct 31 14:53:15 2007 +0000
@@ -0,0 +1,141 @@
+/*
+
+Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Ben Sapp
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#if !defined (octave_debug_h)
+#define octave_debug_h 1
+
+#include <map>
+#include "ov.h"
+#include "dRowVector.h"
+
+class octave_value_list;
+class octave_user_function;
+
+// Interface to breakpoints,.
+
+class bp_table
+{
+private:
+
+  bp_table (void) { }
+
+  ~bp_table (void) { }
+
+public:
+
+  typedef std::map<int, int> intmap;
+
+  typedef intmap::const_iterator const_intmap_iterator;
+  typedef intmap::iterator intmap_iterator;
+
+  typedef std::map <std::string, intmap> fname_line_map;
+
+  typedef fname_line_map::const_iterator const_fname_line_map_iterator;
+  typedef fname_line_map::iterator fname_line_map_iterator;
+
+  static bool instance_ok (void)
+  {
+    bool retval = true;
+
+    if (! instance)
+      instance = new bp_table ();
+
+    if (! instance)
+      {
+        ::error ("unable to create breakpoint table!");
+        retval = false;
+      }
+    
+    return retval;
+  }
+
+  // Add a breakpoint at the nearest executable line.
+  static intmap add_breakpoint (const std::string& fname = "", 
+				const intmap& lines = intmap ())
+  {
+    return instance_ok ()
+      ? instance->do_add_breakpoint (fname, lines) : intmap ();
+  }
+
+  // Remove a breakpoint from a line in file.
+  static int remove_breakpoint (const std::string& fname = "", 
+				const intmap& lines = intmap ())
+  {
+    return instance_ok ()
+      ? instance->do_remove_breakpoint (fname, lines) : 0;
+  }
+
+  // Remove all the breakpoints in a specified file.
+  static intmap remove_all_breakpoints_in_file (const std::string& fname)
+  {
+    return instance_ok ()
+      ? instance->do_remove_all_breakpoints_in_file (fname) : intmap ();
+  }
+  
+  // Remove all the breakpoints registered with octave.
+  static void remove_all_breakpoints (void)
+  {
+    if (instance_ok ())
+      instance->do_remove_all_breakpoints ();
+  }
+  
+  // Return all breakpoints.  Each element of the map is a vector
+  // containing the breakpoints corresponding to a given function name.
+  static fname_line_map
+  get_breakpoint_list (const octave_value_list& fname_list)
+  {
+    return instance_ok ()
+      ? instance->do_get_breakpoint_list (fname_list) : fname_line_map ();
+  }
+
+private:
+
+  // Map from function names to function objects for functions
+  // containing at least one breakpoint.
+  typedef std::map<std::string, octave_user_function *> breakpoint_map;
+
+  typedef breakpoint_map::const_iterator const_breakpoint_map_iterator;
+  typedef breakpoint_map::iterator breakpoint_map_iterator;
+
+  breakpoint_map bp_map;
+
+  static bp_table *instance;
+
+  intmap do_add_breakpoint (const std::string& fname, const intmap& lines);
+
+  int do_remove_breakpoint (const std::string&, const intmap& lines);
+
+  intmap do_remove_all_breakpoints_in_file (const std::string& fname);
+
+  void do_remove_all_breakpoints (void);
+
+  fname_line_map do_get_breakpoint_list (const octave_value_list& fname_list);
+
+};
+
+#endif
+
+/*
+;;; Local Variables: ***
+;;; mode: C++ ***
+;;; End: ***
+*/