summaryrefslogtreecommitdiff
path: root/php/src/IcePHP/Util.h
diff options
context:
space:
mode:
Diffstat (limited to 'php/src/IcePHP/Util.h')
-rw-r--r--php/src/IcePHP/Util.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/php/src/IcePHP/Util.h b/php/src/IcePHP/Util.h
new file mode 100644
index 00000000000..23a8fc4e690
--- /dev/null
+++ b/php/src/IcePHP/Util.h
@@ -0,0 +1,133 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef ICE_PHP_UTIL_H
+#define ICE_PHP_UTIL_H
+
+#include <Config.h>
+
+//
+// Ice_Identity global functions.
+//
+extern "C"
+{
+ZEND_FUNCTION(Ice_stringToIdentity);
+ZEND_FUNCTION(Ice_identityToString);
+}
+
+#define ICE_PHP_IDENTITY_FUNCTIONS \
+ ZEND_FE(Ice_stringToIdentity, NULL) \
+ ZEND_FE(Ice_identityToString, NULL)
+
+namespace IcePHP
+{
+
+bool createIdentity(zval*, const Ice::Identity& TSRMLS_DC);
+bool extractIdentity(zval*, Ice::Identity& TSRMLS_DC);
+
+bool createContext(zval*, const Ice::Context& TSRMLS_DC);
+bool extractContext(zval*, Ice::Context& TSRMLS_DC);
+
+//
+// PHP wrapper for C++ objects.
+//
+struct ice_object
+{
+ zend_object zobj;
+ void* ptr; // For object data.
+};
+
+//
+// Create a new ice_object for a class entry. The allocator registered for the
+// class entry will be invoked, but the C++ object is not created here.
+//
+ice_object* newObject(zend_class_entry* TSRMLS_DC);
+
+//
+// Retrieve the ice_object given a zval.
+//
+ice_object* getObject(zval* TSRMLS_DC);
+
+//
+// Convert the given exception into a PHP equivalent and "throw" it.
+//
+void throwException(const IceUtil::Exception& TSRMLS_DC);
+
+//
+// Find the class entry for a flattened type name.
+//
+zend_class_entry* findClass(const std::string& TSRMLS_DC);
+
+//
+// Find the class entry for a scoped type with suffix.
+//
+zend_class_entry* findClassScoped(const std::string& TSRMLS_DC);
+
+//
+// Convert a string to lowercase.
+//
+std::string lowerCase(const std::string&);
+
+//
+// Flatten a scoped name. Leading "::" is removed, and all remaining "::"
+// are replaced with underscores. The resulting string is then escaped if it
+// conflicts with a PHP keyword.
+//
+std::string flatten(const std::string&);
+
+//
+// Check the given identifier against PHP's list of reserved words. If it matches
+// a reserved word, then an escaped version is returned with a leading underscore.
+//
+std::string fixIdent(const std::string&);
+
+//
+// Convert a Zend type (e.g., IS_BOOL, etc.) to a string for use in error messages.
+//
+std::string zendTypeToString(int);
+
+//
+// Returns true if the given type is valid for use as a key in a native PHP associative array.
+//
+bool isNativeKey(const Slice::TypePtr&);
+
+//
+// Determines whether a class (or interface) inherits from a base class (or interface).
+//
+bool checkClass(zend_class_entry*, zend_class_entry*);
+
+//
+// Exception-safe efree.
+//
+class AutoEfree
+{
+public:
+ AutoEfree(void* p) : _p(p) {}
+ ~AutoEfree() { efree(_p); }
+
+private:
+ void* _p;
+};
+
+//
+// Exception-safe zval destroy.
+//
+class AutoDestroy
+{
+public:
+ AutoDestroy(zval* zv) : _zv(zv) {}
+ ~AutoDestroy() { if(_zv) zval_ptr_dtor(&_zv); }
+
+private:
+ zval* _zv;
+};
+
+} // End of namespace IcePHP
+
+#endif