Add function BASE:IsInstanceOf( className )

This method checks if a Moose object is an instance of a given className.
This commit is contained in:
132nd-etcher
2017-07-12 14:55:25 +02:00
parent 82fd08521f
commit 9fe51587a1
2 changed files with 113 additions and 0 deletions

View File

@@ -287,6 +287,63 @@ function BASE:GetParent( Child )
return Parent
end
--- This is the worker method to check if an object is an (sub)instance of a class.
--
-- ### Examples:
--
-- * ZONE:New( 'some zone' ):IsInstanceOf( ZONE ) will return true
-- * ZONE:New( 'some zone' ):IsInstanceOf( 'ZONE' ) will return true
-- * ZONE:New( 'some zone' ):IsInstanceOf( 'zone' ) will return true
-- * ZONE:New( 'some zone' ):IsInstanceOf( 'BASE' ) will return true
--
-- * ZONE:New( 'some zone' ):IsInstanceOf( 'GROUP' ) will return false
--
-- @param ClassName is the name of the class or the class itself to run the check against
-- @return #boolean
function BASE:IsInstanceOf( className )
-- Is className NOT a string ?
if type( className ) ~= 'string' then
-- Is className a Moose class ?
if type( className ) == 'table' and className.ClassName ~= nil then
-- Get the name of the Moose class as a string
className = className.ClassName
-- className is neither a string nor a Moose class, throw an error
else
-- I'm not sure if this should take advantage of MOOSE logging function, or throw an error for pcall
local err_str = 'className parameter should be a string; parameter received: '..type( className )
self:E( err_str )
-- error( err_str )
return false
end
end
className = string.upper( className )
if string.upper( self.ClassName ) == className then
return true
end
local Parent = self:GetParent(self)
while Parent do
if string.upper( Parent.ClassName ) == className then
return true
end
Parent = Parent:GetParent(Parent)
end
return false
end
--- Get the ClassName + ClassID of the class instance.
-- The ClassName + ClassID is formatted as '%s#%09d'.
-- @param #BASE self