Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: This is the base class, which every ;
- ; class inherits from... ;
- ; ;
- ; Usage: $Class(<uID>,<Params>,...).<Member> ;
- ; Example: var %x $Class ;
- ; Example: $Class.Delete(%x) ;
- ; Example: $Class(%x,Name,Some Text).setv ;
- ; Example: $Class(%x,Name).getv ;
- ; Example: $Class(%x,Name).removev ;
- ; Example: $Class.Delete(%x) ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Public Declarations ;
- ;;;;;;;;;;;;;;;;;;;;;;;
- alias Class.DELETE.Public
- alias Class.GETV.Public
- alias Class.SETV.Public
- alias Class.REMOVEV.Public
- ;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Exception Declarations ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias Class.EXCEPTION.Null
- ;;;;;;;;;;;;;;;
- ; Class Alias ;
- ;;;;;;;;;;;;;;;
- alias Class {
- if (!$prop) goto init
- if ($IsPublic(Class,$prop)) goto $prop
- return $catch(0,MemberErr,$qt($prop) is not a public member of Class)
- :init
- hinc -m Objects ClassObjects
- return $Class.INIT($md5($hget(Objects,ClassObjects)),Class)
- :delete
- return $Class.DELETE($1)
- :getv
- return $Class.GETV($1,$2)
- :setv
- return $Class.SETV($1,$2,$3,$4)
- :removev
- return $Class.REMOVEV($1,$2,$3)
- }
- ;;;;;;;;;;;;;;;;;
- ; Class Methods ;
- ;;;;;;;;;;;;;;;;;
- alias Class.INIT {
- hadd -m Objects $1.INIT $2
- return $1
- }
- alias Class.SETV {
- var %x $hget($1,$2)
- hadd -m $1 $2 $3
- if $4 { $Object(%x).delete }
- return %x
- }
- alias Class.GETV {
- return $hget($1,$2)
- }
- alias Class.REMOVEV {
- var %x $hget($1,$2)
- hdel $1 $2
- if $3 {
- $Object(%x).delete
- }
- }
- alias Class.DELETE {
- ;;;;;;;;;;;;;;;;;;;;;;
- ; Do Destroying here ;
- ;;;;;;;;;;;;;;;;;;;;;;
- var %x 1
- while $hget($1,%x).data {
- var %y $v1
- if $isinstance(%y) { $Object(%y).delete }
- inc %x
- }
- if $hget($1) { hfree $1 }
- hdel -w Objects $1*
- return
- }
- ;;;;;;;;;;;;;
- ; End Class ;
- ;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Returns whether or not a class member ;
- ; is public. ;
- ; ;
- ; Usage: $IsPublic(<Class>,<Member>) ;
- ; Example: if ($IsInstanceOf(%Player,Player)) .. ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias IsPublic return $isalias($+($1.,$2.,Public))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Called from the class constructor to ;
- ; let the object know that the specified object ;
- ; inherits from the specified class ;
- ; ;
- ; Usage: $InheritsFrom(<Object>,<Class>) ;
- ; Example: $InheritsFrom(%instance,Player) ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias InheritsFrom hadd -m Objects $+($1.,INIT) $2 $hget(Objects,$+($1.,INIT))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Returns whether or not an instance is ;
- ; an instance of the specified class ;
- ; ;
- ; Usage: $IsInstanceOf(<Instance>,<Class>) ;
- ; Example: if ($IsInstanceOf(%Player,Player)) .. ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias IsInstanceOf return $findtok($hget(Objects,$1.INIT),$2,0,32)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Returns whether or not an instance ;
- ; exists in memory ;
- ; ;
- ; Usage: $IsInstance(<Instance>) ;
- ; Example: if (!$IsInstance(%x)) %x = $Player ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias IsInstance return $token($hget(Objects, $1.INIT),1,32)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Called when ever an error is caught ;
- ; ;
- ; Usage: $catch(<Instance>,<Error>,<Message>) ;
- ; Example: if (!$IsInstanceOf(%Player,Player)) { ;
- ; $catch(%Player,InstanceErr,Object %player is not ;
- ; an instance of class Player) ;
- ; } ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias Catch {
- var %error $2,%message $3,%instance $1
- if $window(@Debug) { echo @Debug Caught $qt(%error) exception: %message }
- if %instance {
- var %x 1
- while $token($hget(Objects,$+(%instance,.INIT)),%x,32) {
- var %y $+($v1,.Exception.,%error)
- if $isalias(%y) {
- return $($+($,%y,$chr(40),%instance,$chr(44),%message,$chr(41)),2)
- }
- inc %x
- }
- }
- }
- ;;;;;;;;;;;;;
- ; End Catch ;
- ;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Used to call the first found method ;
- ; associated with an objects inheritance tree... ;
- ; ;
- ; Usage: $Object(<Instance>,..).<Method> ;
- ; Example: $Object(%stack,$2).add ;
- ; Equivelent: $List(%stack,$2).add ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias Object {
- var %x 1,%y $hget(Objects,$1.INIT),%a ,,
- while $token(%y,%x,32) {
- var %z $v1
- if $isalias(%z $+ . $+ $prop $+ .Public) {
- return $($ $+ %z $+ $chr(40) $+ $1 %a $2 %a $3 %a $4 %a $5 %a $6 %a $7 %a $8 %a $9 %a $+ $chr(41) $+ . $+ $prop,2)
- }
- inc %x
- }
- return $catch($1,MemberErr,$prop is not a public member of $isinstance($1))
- }
- ;;;;;;;;;;;;;;
- ; End Object ;
- ;;;;;;;;;;;;;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement