Abstraction of an actor

It has a mailbox, can receive and process messages asynchronously

Introduced properties

type V: Object

actors :: Actor :: V

Type of the proxied class (or working class)
init defaultinit(instance: V)

actors :: Actor :: defaultinit

fun instance: V

actors :: Actor :: instance

The instance used to do the real work
protected fun instance=(instance: V)

actors :: Actor :: instance=

The instance used to do the real work
fun kill

actors :: Actor :: kill

Ends self, cancel ongoing work abrutly
fun mailbox: Mailbox[Message]

actors :: Actor :: mailbox

Mailbox used to receive and process messages
protected fun mailbox=(mailbox: Mailbox[Message])

actors :: Actor :: mailbox=

Mailbox used to receive and process messages
fun working: Bool

actors :: Actor :: working

Is self working ?
protected fun working=(working: Bool)

actors :: Actor :: working=

Is self working ?

Redefined properties

redef type SELF: Actor

actors $ Actor :: SELF

Type of this instance, automatically specialized in every class
redef fun main: E

actors $ Actor :: main

Main method of this thread

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type E: nullable Object

pthreads :: Thread :: E

Type returned by main
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
type V: Object

actors :: Actor :: V

Type of the proxied class (or working class)
fun cancel

pthreads :: Thread :: cancel

Cancel the execution of the thread
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
init defaultinit(instance: V)

actors :: Actor :: defaultinit

fun finalize

core :: Finalizable :: finalize

Liberate any resources held by self before the memory holding self is freed
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
fun instance: V

actors :: Actor :: instance

The instance used to do the real work
protected fun instance=(instance: V)

actors :: Actor :: instance=

The instance used to do the real work
fun is_done: Bool

pthreads :: Thread :: is_done

Is this thread finished ? True when main returned
protected fun is_done=(is_done: Bool)

pthreads :: Thread :: is_done=

Is this thread finished ? True when main returned
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
fun join: E

pthreads :: Thread :: join

Join this thread to the calling thread
fun kill

actors :: Actor :: kill

Ends self, cancel ongoing work abrutly
fun mailbox: Mailbox[Message]

actors :: Actor :: mailbox

Mailbox used to receive and process messages
protected fun mailbox=(mailbox: Mailbox[Message])

actors :: Actor :: mailbox=

Mailbox used to receive and process messages
fun main: E

pthreads :: Thread :: main

Main method of this thread
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
fun start

pthreads :: Thread :: start

Start executing this thread
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
fun working: Bool

actors :: Actor :: working

Is self working ?
protected fun working=(working: Bool)

actors :: Actor :: working=

Is self working ?
package_diagram actors::Actor Actor pthreads::Thread Thread actors::Actor->pthreads::Thread core::Finalizable Finalizable pthreads::Thread->core::Finalizable ...core::Finalizable ... ...core::Finalizable->core::Finalizable

Ancestors

class Finalizable

core :: Finalizable

An object needing finalization
interface Object

core :: Object

The root of the class hierarchy.

Parents

abstract class Thread

pthreads :: Thread

Handle to a thread

Class definitions

actors $ Actor
# Abstraction of an actor
# It has a mailbox, can receive and process messages asynchronously
abstract class Actor
	super Thread

	# Type of the proxied class (or working class)
	type V: Object

	# The instance used to do the real work
	# i.e. the real working object
	var instance: V

	# Mailbox used to receive and process messages
	var mailbox = new Mailbox[Message].with_actor(self)

	# Is `self` working ?
	# i.e. does it have messages to process or is it processing one now ?
	var working = true

	redef fun main do
		loop
			var m = mailbox.shift
			if m isa ShutDownMessage then
				sys.active_actors.decrement
				return null
			end
			m.invoke(instance)
		end
	end

	# Ends `self`, cancel ongoing work abrutly
	# Pretty dangerous to use
	fun kill do
		var n = self.native
		if n != null then n.cancel
	end
end
lib/actors/actors.nit:24,1--60,3