-# FIXME: add license like in C files
-
-require 'simgrid_ruby'
+# Task-related bindings to ruby */
+#
+# Copyright 2010. The SimGrid Team. All right reserved. */
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the license (GNU LGPL) which comes with this package. */
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+require 'libsimgrid.so'
require 'thread'
-###########################################################################
-# Class Semaphore
-###########################################################################
-class MySemaphore
- Thread.abort_on_exception = true
- attr_accessor :permits
-
-
- def initialize (permits = 0)
- @permits = permits
- end
-
- def acquire(mutex,cv)
-
- raise "Interrupted Thread " if (!Thread.current.alive?)
- mutex.synchronize {
- while @permits <= 0
-
- cv.wait(mutex)
-
- end
- @permits = @permits - 1
- cv.signal
- }
-
- end
-
- def release(mutex,cv)
- mutex.synchronize{
- @permits += 1
- cv.signal
- }
- end
-end
#######################################
-# Another Semaphore
+# Semaphore
#######################################
class Semaphore
@@nextProcessId = 0
# Attributes
- attr_reader :bind, :id, :name, :pargs ,:properties# Read only
+ attr_reader :name, :pargs ,:properties # Read only
def initialize(*args)
super(){
raise "Bad number of arguments to create a Ruby process. Expected (name,args,prop) " if args.size < 3
-# @cv = ConditionVariable.new
-# @mutex = Mutex.new
@schedBegin = Semaphore.new(0)
@schedEnd = Semaphore.new(0)
@id = @@nextProcessId
@name = args[0]
@pargs = args[1]
@properties = args[2]
-
start()
}
end
end
def start()
- @schedBegin.acquire()
+ @schedBegin.acquire
MSG::debug("Let's execute the main() of the Ruby process")
main(@pargs)
-# processExit(self) # Exit the Native Process
- @schedEnd.release()
+ @schedEnd.release
+ MSG::debug("Released my schedEnd, bailing out")
+ processExit(self) # Exit the Native Process
+
end
-
- # FIXME: useless, there is an attribute for bind (or the attribute is useless)
- # Get Bind
def getBind()
return @bind
end
-
- # Set Binds FIXME: same
+
def setBind(bind)
@bind = bind
end
def unschedule()
- @schedEnd.release()
- @schedBegin.acquire()
+ @schedEnd.release
+ @schedBegin.acquire
end
- def schedule()
- @schedBegin.release()
- @schedEnd.acquire()
+ def schedule()
+ @schedBegin.release
+ @schedEnd.acquire
end
def pause()
def getHost()
processGetHost(self)
end
-
-# The Rest of Methods !!! To be Continued ... FIXME: what's missing?
-end
+end
############################################
# Task Extend from the native Class RbTask
############################################
class MSG::Task < MSG::RbTask
-
+
def initialize(*args)
- super()
+ #Nothing todo
+ end
+
+ def join(value)
+ super(self,value)
+ end
+
+ def data()
+ super(self)
end
def name
- super(self)
+ super(self)
end
def compSize
- super(self)
+ super(self)
end
def send(mailbox)
- super(self,mailbox)
+ super(self,mailbox)
end
-# FIXME : this method should be associated to the class !! it return a task
-# FIXME: simply killing this adapter method should do the trick
def receive(mailbox)
- super(self,mailbox)
+ super(self)
end
def source
end
def listen(t_alias)
- super(t_alias)
+ super(self)
end
def execute
end
def listenFromHost(t_alias,host)
- super(t_alias,host)
+ super(self)
+ end
+
+ def setPriority(priority)
+ super(self,priority)
+ end
+
+ def cancel
+ super(self)
end
+
+ def hasData
+ super(self)
+ end
+
end
-############################################
+####################################################
# Host Extend from the native Class RbHost
-############################################
+####################################################
class MSG::Host < MSG::RbHost
-
+
+ attr_reader :data
+ def initialize(*ars)
+ @data = 1
+ p "Host Initializer"
+ end
+
+ def data()
+ return @data
+ end
+
+ def setData(value)
+ @data = value
+ end
+
def getByName(name)
super(name)
end
super(self)
end
- def setData(data)
- super(self,data)
- end
-
def isAvail
super(self)
end
def number
super()
end
+
+ def getHostProcess(process)
+ super(process)
+ end
+
end
-
#########################
# Main chunck
#########################