Are there any 'bounded container' libraries available to Matlab users?

1 vue (au cours des 30 derniers jours)
Vectors are supported but is there a ready-rolled library that can implement a 'bounded doubly linked list' using Matlab vectors?
  1 commentaire
Cedric
Cedric le 28 Juil 2015
Modifié(e) : Cedric le 28 Juil 2015
EDIT @ 5:26pm : small correction to destructor.
Depending what you need to achieve, you could build a "handle" class which does the trick. Have you tried?
I used my 10 minutes pause for building a very small example:
classdef Node < handle
% Basic example of doubly-linked list.
properties
nodeForward = []
nodeBackward = []
content = []
end
methods
function obj = Node( content, nodeBackward, nodeForward )
% Constructor.
if nargin > 0, obj.content = content ; end
if nargin > 1, obj.nodeBackward = nodeBackward ; end
if nargin > 2, obj.nodeForward = nodeForward ; end
end
function node = addNodeForward( obj, node )
% Add forward node and double-link.
if ~isa( node, 'Node' )
node = Node( node ) ;
end
obj.nodeForward = node ;
obj.nodeForward.nodeBackward = obj ;
end
function node = addNodeBackward( obj, node )
% Add backward node and double-link.
if ~isa( node, 'Node' )
node = Node( node ) ;
end
obj.nodeBackward = node ;
obj.nodeBackward.nodeForward = obj ;
end
function displayForward( obj, depth )
% Display current and call forward (if present) display.
disp( obj ) ;
if nargin < 2, depth = Inf ; end
if ~isempty( obj.nodeForward )
obj.nodeForward.displayForward( depth-1 ) ;
end
end
function displayBackward( obj, depth )
% Display current and call backward (if present) display.
disp( obj ) ;
if nargin < 2, depth = Inf ; end
if ~isempty( obj.nodeBackward )
obj.nodeBackward.displayBackward( depth-1 ) ;
end
end
function delete( obj )
% Destructor: cut and merge.
if ~isempty( obj.nodeForward )
if ~isempty( obj.nodeBackward )
obj.nodeBackward.nodeForward = obj.nodeForward ;
obj.nodeForward.nodeBackward = obj.nodeBackward ;
else
obj.nodeForward.nodeBackward = [] ;
end
elseif ~isempty( obj.nodeBackward )
obj.nodeBackward.nodeForward = [] ;
end
end
function disp( obj )
% Display content instead of obj properties.
% -> comment for debugging
disp( obj.content ) ;
end
end
end
With this, we can do e.g.
clear ;
clc ;
nodeStart = Node( 10 ) ;
node = nodeStart.addNodeForward( magic(3) ) ;
nodeEnd = node.addNodeForward( {'John', 'Doe'} ) ;
fprintf( 'Display forward from start.\n\n')
nodeStart.displayForward
fprintf( 'Delete middle node and display forward from start.\n\n')
delete( node )
nodeStart.displayForward
and we get
Display forward from start.
10
8 1 6
3 5 7
4 9 2
'John' 'Doe'
Delete middle node and display forward from start.
10
'John' 'Doe'

Connectez-vous pour commenter.

Réponse acceptée

Udaya Mallampati
Udaya Mallampati le 27 Juil 2015
Modifié(e) : Udaya Mallampati le 27 Juil 2015
Hi Martin,
This functionality to implement bounded doubly linked list is not currently available. I work for MathWorks and have forwarded your feedback to the appropriate team.
  2 commentaires
Martin Dowie
Martin Dowie le 28 Juil 2015
Thanks - generally bounded forms of vector, list and map (ordered & hashed) are useful in embedded systems, where the performance of an implicit vector using built-in arrays can lead to very, very poor performance.
Perhaps looking at the Ada.Containers.Bounded_* package would provide some useful insight/inspiration?
A bounded vector class is fairly trivial to produce but the others are slightly trickier...
Steven Lord
Steven Lord le 28 Juil 2015
For maps, take a look at the containers.Map functionality.

Connectez-vous pour commenter.

Plus de réponses (1)

Martin Dowie
Martin Dowie le 4 Août 2017
Bit late responding but the suggestions (while interesting) are 'unbounded' containers, and I'm specifically looking for bounded forms (check out the Ada library - it is specifically intended for use in High Integrity Systems - http://ada-auth.org/standards/12rm/html/RM-A-18-19.html and the next few pages).
I might try rolling my own based on the examples given, but it would be so much more useful if Matlab provided them out the box...
Thanks Martin

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by