help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

string dictionary class


From: Jaroslav Hajek
Subject: string dictionary class
Date: Fri, 14 Aug 2009 08:29:24 +0200

hi all,

I have contributed a simple string dictionary class to the `general'
package, which comprises

indexing by strings & cell string arrays
indexed assignment
inserting and deleting elements
existence query (has)
query with default value (get)

it is intended to work with development version of Octave, as it uses
some new features. The implementation uses binary lookup in a sorted
array.
operation complexity, w.r.t. number of existing keys N is:
retrieve and query: O(log(N))
set existing entry: O(log(N)) with the recent subsasgn optimization
(e79470be3ecb), O(N) without it.
insert new key / delete existing: O(N)

it is therefore not suitable for frequent insertions but good when
query is the major operation.

Example usage:

octave:1> gnusoft = dict
gnusoft = dict: {}
octave:2> gnusoft("octave") = "www.octave.org"
gnusoft =

dict: {
  octave : www.octave.org
}
octave:3> gnusoft("gcc") = "gcc.gnu.org"
gnusoft =

dict: {
  gcc : gcc.gnu.org
  octave : www.octave.org
}
octave:4> gnusoft({"octave", "gcc", "octave"})
ans =

{
  [1,1] = www.octave.org
  [1,2] = gcc.gnu.org
  [1,3] = www.octave.org
}

octave:5> getgnusoftaddress = @(name) get(gnusoft, name,
"directory.fsf.org/GNU")
getgnusoftaddress =

@(name) get (gnusoft, name, "directory.fsf.org/GNU")

octave:6> getgnusoftaddress ("octave")
ans = www.octave.org
octave:7> getgnusoftaddress ("bison")
ans = directory.fsf.org/GNU
octave:8> has(gnusoft, {"gcc", "bison"})
ans =

   1   0

octave:9> mathgnusoft = gnusoft
mathgnusoft =

dict: {
  gcc : gcc.gnu.org
  octave : www.octave.org
}
octave:10> mathgnusoft ({"gcc"}) = []
mathgnusoft =

dict: {
  octave : www.octave.org
}
octave:11> files = dir;
octave:12> cache_file_stat = dict ({dir.name}, {dir.statinfo});
octave:13> cache_file_stat ("adresamp2.m")
ans =
{
  dev =  2051
  ino =  14749998
  mode =  33188
  modestr = -rw-r--r--
  nlink =  1
  uid =  1000
  gid =  100
  rdev = 0
  size =  2739
  atime =  1.2464e+09
  mtime =  1.2403e+09
  ctime =  1.2403e+09
  blksize =  4096
  blocks =  16
}


I welcome suggestions for improvements and enhancements.

enjoy!

-- 
RNDr. Jaroslav Hajek
computing expert & GNU Octave developer
Aeronautical Research and Test Institute (VZLU)
Prague, Czech Republic
url: www.highegg.matfyz.cz


reply via email to

[Prev in Thread] Current Thread [Next in Thread]