Newbie questions about Pliant

Newbie questions about Pliant

Removing Element from List

How do I remove element from a list if all I have
is the pointer with which it was added ?

The way I want to use the list, is I want to create an object, add it to the list,
and keep a pointer to it, so that later if need to I can delete it from the list.
Message posted by maybe Boris Reitman on 2004/10/21 20:04:05
Here is an example of my program. If I uncomment the line "list -= t1" and 
comment "list -= a" it doesn't work.  (It doesn't find the element, and doesn't remove it). 
========================
module "/pliant/language/compiler.pli"

type T
  field Int x y

function main
  var List:T list
  var Pointer:T t1 :> new T
  var Pointer:T t2 :> new T
           
  list += t1
  list += t2
  
  each t list
    console "here" eol
    
  var Pointer:T a :> list:first
  #list -= t1
  list -= a
  
  each t list
    console "there" eol
  
  console "done" eol
  
main
=========================

Also, I don't understand, do I need to preallocate an object that I add to a list ?
Because, list += (var T dummy) also seems to work.

Thanks,
Boris
Message posted by hubert.tonneau on 2004/10/26 10:44:43
The problem is that you have not undestood what 'list += t1' does.

It allocates a new T instance, with some extra space for the list pointers,
and copy the content mapped by t1 with it.
As a result, what is in the list is not the object pointed by t1.

If you expect the list to point t1, the type of the list should be
(List Link:T)
Message posted by maybe Boris Reitman on 2004/10/29 17:41:46
Okay, why does the following crash ? 
--------------
module "/pliant/language/compiler.pli"

type T
  field Int x y

function main
  var List:(Link:T) list
  var Link:T t1 :> new T
  var Link:T t2 :> new T
  
  list += t1
  list += t2

  each t list
    console "here" eol

  # try to remove
  list -= t1

  console "done" eol
  
main
--------------------------

Here is the error message:

$ pliant t.pli
here
here
exception 11
----------------------------------------------------------------
actions stack is:
execute file:/home/boris/tmp/t.pli (internals) 22 1
parse file:/home/boris/tmp/t.pli (internals) 27 1
module file:/home/boris/tmp/t.pli
----------------------------------------------------------------
processor stack content is:
. free (MemoryPool Address) +56
memory_free_mt  /pliant/language/schedule/multi_threads_locks.pli (internals) 37 1 /pliant/language/schedule/multi_threads_locks.pli (internals) 40 3
memory_free (Address) +14
. remove  /pliant/language/type/set/list.pli (internals) 211 5 /pliant/language/type/set/list.pli (internals) 217 7
...
Message posted by hubert.tonneau on 2004/10/30 20:24:48
t1 is still not one of the objects in the list.
In the list, you have a link pointing to the same object as t1 does, but the
link in the list is another link to the same object.