--------------------------------------------------------------------
TODO      DOTODOTODOTODOTODOTODOTODOTODOTODOTODOTODOTODOTO      TODO


If you are interested in contributing, subscribe to the OS/Perl
mailing list.  Send email to majordomo@parallax.co.uk with the
following in the body of your message:
  "subscribe perl-objectstore you@your.company.com"


+ IDEAS +

sort tests into appropriate directories?

MAKEMAKEROPT

split ObjStore::Serve stuff into its own tarball
  improve organization?
  + better advertising
  - annoying to install

disable autoload per class via some API
  depreciate _fake:: junk

die with a ref!

struct OSPV2 : os_virtual_behavior {
  int can_update(void *vptr);
  void NOTFOUND(char *meth);
  void fwd2rep(char *methname, SV **top, int items);
  HV *load_stash_cache(char *CLASS, STRLEN CLEN, OSPV_Generic *blessinfo);

  virtual ~OSPV2();
  virtual void REF_inc();
  virtual void REF_dec();
  virtual int is_blessed();
  virtual void bless(SV *);
  virtual HV *get_stash();
  virtual int get_perl_type();
  virtual void make_constant();
  virtual void _debug1(void *); //whatever you want

  // must be NULL terminated
  virtual char *os_class(STRLEN *len);
  virtual char *rep_class(STRLEN *len);

  // C++ cast hacks
  virtual int is_OSPV_Ref2();
  virtual int is_OSPV_Generic();

  //--------- should be under OSPV_Container but casting is tiresome -||
  virtual void POSH_CD(SV *to);
  virtual int FETCHSIZE();

  // osp_pathexam support (containers only!)
  virtual OSSVPV *traverse1(osp_pathexam &exam);
  virtual OSSV *traverse2(osp_pathexam &exam);

  // OSPV_Generic: internal index configuration, etc
  virtual OSSV *avx(int xx);
  virtual OSSV *hvx(char *key);
  //--------- should be under OSPV_Container but casting is tiresome -||
};

KEEP INHERITANCE AS FLAT AS POSSIBLE

test case for freeze bug using databases on multiple hosts

read the installed ObjStore::Config for defaults

tests
  pathexam.t - test all comparison branches
  each POSH_PEEK method

any traverse2 should check for RV (&die)

performance
  think about avoiding string copies again?
  modification counters?
  can BLESS be faster? (at least the first time?)
  bless: should cache transient refs?
  AVHV: should create a transient ref to the layout?
  can easily cache whether object needs AVHV style traverse
  _private_root_data XS? XXX

Index
  PUSH & UNSHIFT: just verify the order is correct?

RE-THINK:
  sub isa { _isa(@_, 1); }
  sub versionof { _versionof(@_, 1); }
  sub is_evolved { _is_evolved(@_, 1); }

patches
  PERL_OBJECT / ExCxx !!
  VTBL collections implementation!
  XSthr.h
  fold osp_croak back into perl
  MakeMaker patch for blib shared libraries

arrays using a doubly-linked list representation

Mike Guy writes: How about "die if in a void context"?  That would get
the best of both worlds.  I'd like to see that style used much more in
Perl.  Or the variant of "warn if in a void context".  Unchecked
results of open comes particularly to mind.


+ VAGUE POSSIBILITIES +

ObjStore::ServerDB::Top
  POSH_PEEK - maybe try to require stuff before UNLOADED can happen?

more support for DLL schemas?
  generic scalar object typemap?  XPVMG abstraction?
  Bit::Vector?

threads
  optional transaction-level mutex to debug data accesses?

pathexam
  It is feasible to skip load_path if the index matches...?  Hm.

make all depreciated stuff autoloaded

-MObjStore=-Dflags ?

transactions
  prevent more than one thread from using a local transaction? (safe mode?)
  begin('update!',...): force switch to update?

fatal_exceptions(0) by default?  Hard to change!  :-(

qtposh
  AVHV looks different depending whether it goes through resolve??!
  resolve failures seem not to get reported?
  share more code between posh & qtposh
  hyperlink interface!
&
  word wrap, but it doesn't seem to be supported
  optionally distinguish between return and enter keys?

posh
  -e
  merge with ObjStore::Posh::Cursor
  display style?  web integration?  cgi-posh?
  hyperlink interface!

~magic ownership check?

$ref->notify('m1', 'batch'); ???

ObjStore::Index configure
  unique index duplicate row behavior?
  read-only keys?

configure(...) : relax parameter limitation

split all the server goodies into a separate package?

switch representations dynamically?
  cursor syncronization: check os_typespec?
  do arrays first
  lock representation... hm...?
  generate 'new' methods at compile time?

permutation magic for AVHV
  ObjStore::Index::_(un)protect?

translate('transient', $persistent) ??

The ObjStore version should be stored in a separate root with a
fixed data structure like double[10]?

move ObjStore::subscribe back into ObjStore::Notification?

optimize splash suite
  hash performance sucks
  arrays are inefficient?

get_database
  factor
  os_server::get_databases() ignores bless; yikes!

prune excessive debugging hooks

posh
  Multiple sessions per user?  Who cares?
  Call system() when in ufs?  How about rawfs?
Peeker
  fix comma - $o->comma, then check in $o->nl
  fix for "$at = " prefix ?

script to insure consistent podding? (get Pod::Parser?)

assignment to $SIG{SEGV} should not reset SEGV handler

transaction hooks?

factor error messages like diagnostics.pm?

ObjStore::File - Use a FatTree of 4K buffers?

automatically spooge $ObjStore::RUN_TIME if @ISA changes?

install HTML versions of the pod files & gif image

notifications
  notify should in/out string length!  #SE057480_O#

change_schema_key:
  delete database INC, checksum %INC, light up security flags?
  open: require each %INC, verify checksums (unless some flags is set)
  TAINTing?

Make XS code more efficient.  (How?)

Evolve the schema to eliminate this harmless annoyance:  The object at 0xdff30194(</elvis/export2/os/tmp/perltest | 2 | 194>)(type "OSPV_hvdict"), contains a pointer at 0xdff301a0(OSPV_hvdict::OSPV_Generic::OSPV_Container::OSSVPV.classname) with the illegal value 0xe0582d28. The declared type "char" is incompatible with the type of the object at address </elvis/export2/os/tmp/perltest | 4 | 2d28>(OSPV_avarray::OSPV_Generic::OSPV_Container::OSSVPV::os_virtual_behavior|vtbl{os_virtual_behavior*}).  The type of this object is: OSPV_avarray.


+ BIGGISH PROJECTS +

Needed is a more flexible hash table that can serve to replace
os_Dictionary and also be used as an ObjStore::Index.

optional pool allocation of numeric types [why bother??]
  configurable block size
  store offset in xiv!
  think about performance

