#include
#include
static bool MCTypeValueIsEmpty(MCValueRef p_value)
{
return p_value != kMCNull &&
(p_value == kMCEmptyName ||
(MCValueGetTypeCode(p_value) == kMCValueTypeCodeArray && MCArrayIsEmpty((MCArrayRef)p_value)) ||
(MCValueGetTypeCode(p_value) == kMCValueTypeCodeString && MCStringIsEmpty((MCStringRef)p_value)) ||
(MCValueGetTypeCode(p_value) == kMCValueTypeCodeName && MCNameIsEmpty((MCNameRef)p_value)) ||
(MCValueGetTypeCode(p_value) == kMCValueTypeCodeData && MCDataIsEmpty((MCDataRef)p_value)) ||
(MCValueGetTypeCode(p_value) == kMCValueTypeCodeProperList && MCProperListIsEmpty((MCProperListRef)p_value)));
}
extern "C" MC_DLLEXPORT_DEF void MCTypeEvalIsEmpty(MCValueRef p_target, bool& r_output)
{
r_output = MCTypeValueIsEmpty(p_target);
}
extern "C" MC_DLLEXPORT_DEF void MCTypeEvalIsNotEmpty(MCValueRef p_target, bool& r_output)
{
bool t_empty;
MCTypeEvalIsEmpty(p_target, t_empty);
r_output = !t_empty;
}
extern "C" MC_DLLEXPORT_DEF void MCTypeEvalIsDefined(MCValueRef *p_target, bool& r_output)
{
r_output = (p_target != nil && *p_target != kMCNull);
}
extern "C" MC_DLLEXPORT_DEF void MCTypeEvalIsNotDefined(MCValueRef *p_target, bool& r_output)
{
bool t_defined;
MCTypeEvalIsDefined(p_target, t_defined);
r_output = !t_defined;
}
extern "C" MC_DLLEXPORT_DEF void MCTypeEvalIsABoolean(MCValueRef p_value, bool& r_output)
{
if (p_value != nil)
r_output = MCValueGetTypeCode(p_value) == kMCValueTypeCodeBoolean;
else
r_output = false;
}
extern "C" MC_DLLEXPORT_DEF void MCTypeEvalIsANumber(MCValueRef p_value, bool& r_output)
{
if (p_value != nil)
r_output = MCValueGetTypeCode(p_value) == kMCValueTypeCodeNumber;
else
r_output = false;
}
extern "C" MC_DLLEXPORT_DEF void MCTypeEvalIsAString(MCValueRef p_value, bool& r_output)
{
if (p_value != nil)
r_output = MCValueGetTypeCode(p_value) == kMCValueTypeCodeString;
else
r_output = false;
}
extern "C" MC_DLLEXPORT_DEF void MCTypeEvalIsAData(MCValueRef p_value, bool& r_output)
{
if (p_value != nil)
r_output = MCValueGetTypeCode(p_value) == kMCValueTypeCodeData;
else
r_output = false;
}
extern "C" MC_DLLEXPORT_DEF void MCTypeEvalIsAnArray(MCValueRef p_value, bool& r_output)
{
if (p_value != nil)
r_output = MCValueGetTypeCode(p_value) == kMCValueTypeCodeArray;
else
r_output = false;
}
extern "C" MC_DLLEXPORT_DEF void MCTypeEvalIsAList(MCValueRef p_value, bool& r_output)
{
if (p_value != nil)
r_output = MCValueGetTypeCode(p_value) == kMCValueTypeCodeProperList;
else
r_output = false;
}
extern "C" MC_DLLEXPORT_DEF void MCNothingEvalIsNothingEqualTo(MCNullRef p_left, MCValueRef p_right, bool& r_output)
{
r_output = p_right == nil;
}
extern "C" MC_DLLEXPORT_DEF void MCNothingEvalIsEqualToNothing(MCValueRef p_left, MCNullRef p_right, bool& r_output)
{
r_output = p_left == nil;
}
extern "C" MC_DLLEXPORT_DEF void MCNothingEvalIsNothingNotEqualTo(MCNullRef p_left, MCValueRef p_right, bool& r_output)
{
r_output = p_right != nil;
}
extern "C" MC_DLLEXPORT_DEF void MCNothingEvalIsNotEqualToNothing(MCValueRef p_left, MCNullRef p_right, bool& r_output)
{
r_output = p_left != nil;
}
extern "C" MC_DLLEXPORT_DEF void MCNothingEvalIsNothingEqualToNothing(MCValueRef, MCValueRef, bool& r_output)
{
r_output = true;
}
extern "C" MC_DLLEXPORT_DEF void MCNothingEvalIsNothingNotEqualToNothing(MCValueRef, MCValueRef, bool& r_output)
{
r_output = false;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
extern "C" bool com_livecode_type_Initialize (void)
{
return true;
}
extern "C" void com_livecode_type_Finalize (void)
{
;
}
////////////////////////////////////////////////////////////////
#ifdef _TEST
extern void log(const char *module, const char *test, bool result);
#define log_result(test, result) log("TYPE MODULE", test, result)
void MCTypeRunTests()
{
/*
void MCTypeEvalBoolAsString(bool p_target, MCStringRef& r_output)
void MCTypeEvalRealAsString(double p_target, MCStringRef& r_output)
void MCTypeEvalIntAsString(integer_t p_target, MCStringRef& r_output)
void MCTypeEvalStringAsBool(MCStringRef p_target, bool& r_output)
void MCTypeEvalStringAsReal(MCStringRef p_target, real64_t r_output)
void MCTypeEvalStringAsInt(MCStringRef p_target, integer_t r_output)
void MCTypeEvalIntAsReal(integer_t p_target, real64_t r_output)
void MCTypeEvalIsEmpty(MCValueRef p_target, bool& r_output)
void MCTypeEvalIsNotEmpty(MCValueRef p_target, bool& r_output)
void MCTypeEvalIsDefined(MCValueRef p_target, bool& r_output)
void MCTypeEvalIsNotDefined(MCValueRef p_target, bool p_is_not, bool& r_output)
void MCTypeEvalIsEqual(MCValueRef p_left, MCValueRef p_right, bool& r_output)
void MCTypeEvalIsNotEqual(MCValueRef p_left, MCValueRef p_right, bool& r_output)
*/
MCAutoStringRef t_int_string, t_real_string;
MCAutoStringRef t_string_int, t_string_real;
integer_t t_int, t_int2;
real64_t t_real, t_real2;
t_int = 1234567890;
MCTypeEvalIntAsString(t_int, &t_int_string);
MCTypeEvalStringAsInt(*t_int_string, t_int2);
bool t_result;
t_result = (t_int == t_int2);
log_result("round trip integer -> string -> integer", t_result);
t_real = 1.23545467e25;
MCTypeEvalRealAsString(t_real, &t_real_string);
MCTypeEvalStringAsReal(*t_real_string, t_real2);
if (t_result)
t_result = (t_real == t_real2);
log_result("round trip real -> string -> real", t_result);
}
#endif