From 82fd08521f250902aad3ecee8aea539d23890c00 Mon Sep 17 00:00:00 2001 From: 132nd-etcher <132nd-etcher@daribouca.net> Date: Wed, 12 Jul 2017 14:55:15 +0200 Subject: [PATCH] Add UTILS.IsInstanceOf = function( object, className ) This function takes any object and check if it is an instance of className. The object can be either a MOOSE class or a basic lua type. --- Moose Development/Moose/Utilities/Utils.lua | 63 ++++++++++++ docs/Documentation/Utils.html | 100 ++++++++++++++++++++ 2 files changed, 163 insertions(+) diff --git a/Moose Development/Moose/Utilities/Utils.lua b/Moose Development/Moose/Utilities/Utils.lua index b1f481ed6..6d9a733da 100644 --- a/Moose Development/Moose/Utilities/Utils.lua +++ b/Moose Development/Moose/Utilities/Utils.lua @@ -33,6 +33,69 @@ FLARECOLOR = trigger.flareColor -- #FLARECOLOR -- @type UTILS UTILS = {} +--- Function to infer instance of an object +-- +-- ### Examples: +-- +-- * UTILS.IsInstanceOf( 'some text', 'string' ) will return true +-- * UTILS.IsInstanceOf( some_function, 'function' ) will return true +-- * UTILS.IsInstanceOf( 10, 'number' ) will return true +-- * UTILS.IsInstanceOf( false, 'boolean' ) will return true +-- * UTILS.IsInstanceOf( nil, 'nil' ) will return true +-- +-- * UTILS.IsInstanceOf( ZONE:New( 'some zone', ZONE ) will return true +-- * UTILS.IsInstanceOf( ZONE:New( 'some zone', 'ZONE' ) will return true +-- * UTILS.IsInstanceOf( ZONE:New( 'some zone', 'zone' ) will return true +-- * UTILS.IsInstanceOf( ZONE:New( 'some zone', 'BASE' ) will return true +-- +-- * UTILS.IsInstanceOf( ZONE:New( 'some zone', 'GROUP' ) will return false +-- +-- +-- @param object is the object to be evaluated +-- @param className is the name of the class to evaluate (can be either a string or a Moose class) +-- @return #boolean +UTILS.IsInstanceOf = function( object, className ) + -- Is className NOT a string ? + if not type( className ) == 'string' then + + -- Is className a Moose class ? + if type( className ) == 'table' and className.IsInstanceOf ~= 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 ) + return false + -- error( err_str ) + + end + end + + -- Is the object a Moose class instance ? + if type( object ) == 'table' and object.IsInstanceOf ~= nil then + + -- Use the IsInstanceOf method of the BASE class + return object:IsInstanceOf( className ) + else + + -- If the object is not an instance of a Moose class, evaluate against lua basic data types + local basicDataTypes = { 'string', 'number', 'function', 'boolean', 'nil', 'table' } + for _, basicDataType in ipairs( basicDataTypes ) do + if className == basicDataType then + return type( object ) == basicDataType + end + end + end + + -- Check failed + return false +end + --from http://lua-users.org/wiki/CopyTable UTILS.DeepCopy = function(object) diff --git a/docs/Documentation/Utils.html b/docs/Documentation/Utils.html index 9d8cb3142..13adb0b4a 100644 --- a/docs/Documentation/Utils.html +++ b/docs/Documentation/Utils.html @@ -236,12 +236,41 @@ which are excellent tools to be reused in an OO environment!.

UTILS.FeetToMeters(feet) + + + + UTILS.IsInstanceOf(object, className) + +

Function to infer instance of an object

+ +

Examples:

+ + + + UTILS.KmphToMps(kmph) + + + + UTILS.KnotsToKmph(knots) + + @@ -608,6 +637,56 @@ use negative idp for rounding ahead of decimal place, positive for rounding afte
+ +UTILS.IsInstanceOf(object, className) + +
+
+ +

Function to infer instance of an object

+ +

Examples:

+ + + + + +

Parameters

+ +

Return value

+ +

#boolean:

+ + +
+
+
+
+ UTILS.KmphToMps(kmph) @@ -629,6 +708,27 @@ use negative idp for rounding ahead of decimal place, positive for rounding afte
+ +UTILS.KnotsToKmph(knots) + +
+
+ + + +

Parameter

+
    +
  • + +

    knots :

    + +
  • +
+
+
+
+
+ UTILS.KnotsToMps(knots)