/* +----------------------------------------------------------------------+ | HipHop for PHP | +----------------------------------------------------------------------+ | Copyright (c) 2010- Facebook, Inc. (http://www.facebook.com) | | Copyright (c) 1997-2010 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ */ #ifndef __HPHP_VARIABLE_H__ #define __HPHP_VARIABLE_H__ #include namespace HPHP { /////////////////////////////////////////////////////////////////////////////// // type testing inline bool f_is_bool(bool v) { return true;} inline bool f_is_bool(char v) { return false;} inline bool f_is_bool(short v) { return false;} inline bool f_is_bool(int v) { return false;} inline bool f_is_bool(int64_t v) { return false;} inline bool f_is_bool(double v) { return false;} inline bool f_is_bool(litstr v) { return false;} inline bool f_is_bool(const StringData *v) { not_reached(); } inline bool f_is_bool(CStrRef v) { return false;} inline bool f_is_bool(CArrRef v) { return false;} inline bool f_is_bool(CObjRef v) { return false;} inline bool f_is_bool(CVarRef v) { return v.is(KindOfBoolean);} inline bool f_is_int(bool v) { return false;} inline bool f_is_int(char v) { return true;} inline bool f_is_int(short v) { return true;} inline bool f_is_int(int v) { return true;} inline bool f_is_int(int64_t v) { return true;} inline bool f_is_int(double v) { return false;} inline bool f_is_int(litstr v) { return false;} inline bool f_is_int(const StringData *v) { not_reached(); } inline bool f_is_int(CStrRef v) { return false;} inline bool f_is_int(CArrRef v) { return false;} inline bool f_is_int(CObjRef v) { return false;} inline bool f_is_int(CVarRef v) { return v.isInteger();} inline bool f_is_integer(bool v) { return false;} inline bool f_is_integer(char v) { return true;} inline bool f_is_integer(short v) { return true;} inline bool f_is_integer(int v) { return true;} inline bool f_is_integer(int64_t v) { return true;} inline bool f_is_integer(double v) { return false;} inline bool f_is_integer(litstr v) { return false;} inline bool f_is_integer(const StringData *v) { not_reached(); } inline bool f_is_integer(CStrRef v) { return false;} inline bool f_is_integer(CArrRef v) { return false;} inline bool f_is_integer(CObjRef v) { return false;} inline bool f_is_integer(CVarRef v) { return v.isInteger();} inline bool f_is_long(bool v) { return false;} inline bool f_is_long(char v) { return true;} inline bool f_is_long(short v) { return true;} inline bool f_is_long(int v) { return true;} inline bool f_is_long(int64_t v) { return true;} inline bool f_is_long(double v) { return false;} inline bool f_is_long(litstr v) { return false;} inline bool f_is_long(const StringData *v) { not_reached(); } inline bool f_is_long(CStrRef v) { return false;} inline bool f_is_long(CArrRef v) { return false;} inline bool f_is_long(CObjRef v) { return false;} inline bool f_is_long(CVarRef v) { return v.isInteger();} inline bool f_is_double(bool v) { return false;} inline bool f_is_double(char v) { return false;} inline bool f_is_double(short v) { return false;} inline bool f_is_double(int v) { return false;} inline bool f_is_double(int64_t v) { return false;} inline bool f_is_double(double v) { return true;} inline bool f_is_double(litstr v) { return false;} inline bool f_is_double(const StringData *v) { not_reached(); } inline bool f_is_double(CStrRef v) { return false;} inline bool f_is_double(CArrRef v) { return false;} inline bool f_is_double(CObjRef v) { return false;} inline bool f_is_double(CVarRef v) { return v.is(KindOfDouble);} inline bool f_is_float(bool v) { return false;} inline bool f_is_float(char v) { return false;} inline bool f_is_float(short v) { return false;} inline bool f_is_float(int v) { return false;} inline bool f_is_float(int64_t v) { return false;} inline bool f_is_float(double v) { return true;} inline bool f_is_float(litstr v) { return false;} inline bool f_is_float(const StringData *v) { not_reached(); } inline bool f_is_float(CStrRef v) { return false;} inline bool f_is_float(CArrRef v) { return false;} inline bool f_is_float(CObjRef v) { return false;} inline bool f_is_float(CVarRef v) { return v.is(KindOfDouble);} inline bool f_is_numeric(bool v) { return false;} inline bool f_is_numeric(char v) { return true;} inline bool f_is_numeric(short v) { return true;} inline bool f_is_numeric(int v) { return true;} inline bool f_is_numeric(int64_t v) { return true;} inline bool f_is_numeric(double v) { return true;} inline bool f_is_numeric(litstr v) { return String(v).isNumeric();} inline bool f_is_numeric(const StringData *v) { not_reached(); } inline bool f_is_numeric(CStrRef v) { return v.isNumeric();} inline bool f_is_numeric(CArrRef v) { return false;} inline bool f_is_numeric(CObjRef v) { return false;} inline bool f_is_numeric(CVarRef v) { return v.isNumeric(true);} inline bool f_is_real(bool v) { return false;} inline bool f_is_real(char v) { return false;} inline bool f_is_real(short v) { return false;} inline bool f_is_real(int v) { return false;} inline bool f_is_real(int64_t v) { return false;} inline bool f_is_real(double v) { return true;} inline bool f_is_real(litstr v) { return false;} inline bool f_is_real(const StringData *v) { not_reached(); } inline bool f_is_real(CStrRef v) { return false;} inline bool f_is_real(CArrRef v) { return false;} inline bool f_is_real(CObjRef v) { return false;} inline bool f_is_real(CVarRef v) { return v.is(KindOfDouble);} inline bool f_is_string(bool v) { return false;} inline bool f_is_string(char v) { return false;} inline bool f_is_string(short v) { return false;} inline bool f_is_string(int v) { return false;} inline bool f_is_string(int64_t v) { return false;} inline bool f_is_string(double v) { return false;} inline bool f_is_string(litstr v) { return true;} inline bool f_is_string(const StringData *v) { not_reached(); } inline bool f_is_string(CStrRef v) { return true;} inline bool f_is_string(CArrRef v) { return false;} inline bool f_is_string(CObjRef v) { return false;} inline bool f_is_string(CVarRef v) { return v.isString();} inline bool f_is_scalar(bool v) { return true;} inline bool f_is_scalar(char v) { return true;} inline bool f_is_scalar(short v) { return true;} inline bool f_is_scalar(int v) { return true;} inline bool f_is_scalar(int64_t v) { return true;} inline bool f_is_scalar(double v) { return true;} inline bool f_is_scalar(litstr v) { return true;} inline bool f_is_scalar(const StringData *v) { not_reached(); } inline bool f_is_scalar(CStrRef v) { return true;} inline bool f_is_scalar(CArrRef v) { return false;} inline bool f_is_scalar(CObjRef v) { return false;} inline bool f_is_scalar(CVarRef v) { return v.isScalar();} inline bool f_is_array(bool v) { return false;} inline bool f_is_array(char v) { return false;} inline bool f_is_array(short v) { return false;} inline bool f_is_array(int v) { return false;} inline bool f_is_array(int64_t v) { return false;} inline bool f_is_array(double v) { return false;} inline bool f_is_array(litstr v) { return false;} inline bool f_is_array(const StringData *v) { not_reached(); } inline bool f_is_array(CStrRef v) { return false;} inline bool f_is_array(CArrRef v) { return true;} inline bool f_is_array(CObjRef v) { return false;} inline bool f_is_array(CVarRef v) { return v.is(KindOfArray);} inline bool f_is_object(bool v) { return false;} inline bool f_is_object(char v) { return false;} inline bool f_is_object(short v) { return false;} inline bool f_is_object(int v) { return false;} inline bool f_is_object(int64_t v) { return false;} inline bool f_is_object(double v) { return false;} inline bool f_is_object(litstr v) { return false;} inline bool f_is_object(const StringData *v) { not_reached(); } inline bool f_is_object(CStrRef v) { return false;} inline bool f_is_object(CArrRef v) { return false;} inline bool f_is_object(CObjRef v) { return !v.isResource();} bool f_is_object(CVarRef v); inline bool f_is_resource(bool v) { return false;} inline bool f_is_resource(char v) { return false;} inline bool f_is_resource(short v) { return false;} inline bool f_is_resource(int v) { return false;} inline bool f_is_resource(int64_t v) { return false;} inline bool f_is_resource(double v) { return false;} inline bool f_is_resource(litstr v) { return false;} inline bool f_is_resource(const StringData *v) { not_reached(); } inline bool f_is_resource(CStrRef v) { return false;} inline bool f_is_resource(CArrRef v) { return false;} inline bool f_is_resource(CObjRef v) { return v.isResource();} inline bool f_is_resource(CVarRef v) { return v.isResource();} inline bool f_is_null(bool v) { return false;} inline bool f_is_null(char v) { return false;} inline bool f_is_null(short v) { return false;} inline bool f_is_null(int v) { return false;} inline bool f_is_null(int64_t v) { return false;} inline bool f_is_null(double v) { return false;} inline bool f_is_null(litstr v) { return false;} inline bool f_is_null(const StringData *v) { not_reached(); } inline bool f_is_null(CStrRef v) { return v.isNull();} inline bool f_is_null(CArrRef v) { return v.isNull();} inline bool f_is_null(CObjRef v) { return v.isNull();} inline bool f_is_null(CVarRef v) { return v.isNull();} inline String f_gettype(bool v) { return "boolean";} inline String f_gettype(char v) { return "integer";} inline String f_gettype(short v) { return "integer";} inline String f_gettype(int v) { return "integer";} inline String f_gettype(int64_t v) { return "integer";} inline String f_gettype(double v) { return "double";} inline String f_gettype(litstr v) { return "string";} inline String f_gettype(const StringData *v) { not_reached(); } inline String f_gettype(CStrRef v) { return "string";} inline String f_gettype(CArrRef v) { return "array";} inline String f_gettype(CObjRef v) { return "object";} String f_gettype(CVarRef v); String f_get_resource_type(CObjRef handle); /////////////////////////////////////////////////////////////////////////////// // type conversion int64_t f_intval(CVarRef v, int64_t base = 10); double f_doubleval(CVarRef v); double f_floatval(CVarRef v); String f_strval(CVarRef v); bool f_settype(VRefParam var, CStrRef type); /////////////////////////////////////////////////////////////////////////////// // input/output Variant f_print_r(CVarRef expression, bool ret = false); Variant f_var_export(CVarRef expression, bool ret = false); void f_var_dump(CVarRef v); void f_var_dump(int _argc, CVarRef expression, CArrRef _argv = null_array); void f_debug_zval_dump(CVarRef variable); String f_serialize(CVarRef value); Variant f_unserialize(CStrRef str); /////////////////////////////////////////////////////////////////////////////// // variable table Array f_get_defined_vars(); bool f_import_request_variables(CStrRef types, CStrRef prefix = ""); #define EXTR_OVERWRITE 0 #define EXTR_SKIP 1 #define EXTR_PREFIX_SAME 2 #define EXTR_PREFIX_ALL 3 #define EXTR_PREFIX_INVALID 4 #define EXTR_PREFIX_IF_EXISTS 5 #define EXTR_IF_EXISTS 6 #define EXTR_REFS 0x100 int64_t f_extract(CArrRef var_array, int extract_type = EXTR_OVERWRITE, CStrRef prefix = ""); /////////////////////////////////////////////////////////////////////////////// } #endif // __HPHP_VARIABLE_H__