summaryrefslogtreecommitdiff
path: root/php/src/php5/Util.h
diff options
context:
space:
mode:
Diffstat (limited to 'php/src/php5/Util.h')
-rw-r--r--php/src/php5/Util.h167
1 files changed, 167 insertions, 0 deletions
diff --git a/php/src/php5/Util.h b/php/src/php5/Util.h
new file mode 100644
index 00000000000..35b2b025c22
--- /dev/null
+++ b/php/src/php5/Util.h
@@ -0,0 +1,167 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2016 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 ICEPHP_UTIL_H
+#define ICEPHP_UTIL_H
+
+#include <Config.h>
+
+//
+// Global functions.
+//
+extern "C"
+{
+ZEND_FUNCTION(Ice_stringVersion);
+ZEND_FUNCTION(Ice_intVersion);
+ZEND_FUNCTION(Ice_generateUUID);
+ZEND_FUNCTION(Ice_currentProtocol);
+ZEND_FUNCTION(Ice_currentProtocolEncoding);
+ZEND_FUNCTION(Ice_currentEncoding);
+ZEND_FUNCTION(Ice_protocolVersionToString);
+ZEND_FUNCTION(Ice_stringToProtocolVersion);
+ZEND_FUNCTION(Ice_encodingVersionToString);
+ZEND_FUNCTION(Ice_stringToEncodingVersion);
+}
+
+namespace IcePHP
+{
+
+void* createWrapper(zend_class_entry*, size_t TSRMLS_DC);
+void* extractWrapper(zval* TSRMLS_DC);
+
+//
+// Wraps a C++ pointer inside a PHP object.
+//
+template<typename T>
+struct Wrapper
+{
+ zend_object zobj;
+ T* ptr;
+
+ static Wrapper<T>* create(zend_class_entry* ce TSRMLS_DC)
+ {
+ Wrapper<T>* w = static_cast<Wrapper<T>*>(createWrapper(ce, sizeof(Wrapper<T>) TSRMLS_CC));
+ w->ptr = 0;
+ return w;
+ }
+
+ static Wrapper<T>* extract(zval* zv TSRMLS_DC)
+ {
+ return static_cast<Wrapper<T>*>(extractWrapper(zv TSRMLS_CC));
+ }
+
+ static T value(zval* zv TSRMLS_DC)
+ {
+ Wrapper<T>* w = extract(zv TSRMLS_CC);
+ if(w)
+ {
+ return *w->ptr;
+ }
+ return 0;
+ }
+};
+
+zend_class_entry* idToClass(const std::string& TSRMLS_DC);
+zend_class_entry* nameToClass(const std::string& TSRMLS_DC);
+
+bool createIdentity(zval*, const Ice::Identity& TSRMLS_DC);
+bool extractIdentity(zval*, Ice::Identity& TSRMLS_DC);
+
+bool createStringMap(zval*, const std::map<std::string, std::string>& TSRMLS_DC);
+bool extractStringMap(zval*, std::map<std::string, std::string>& TSRMLS_DC);
+
+bool createStringArray(zval*, const Ice::StringSeq& TSRMLS_DC);
+bool extractStringArray(zval*, Ice::StringSeq& TSRMLS_DC);
+
+//
+// Create a PHP instance of Ice_ProtocolVersion.
+//
+bool createProtocolVersion(zval*, const Ice::ProtocolVersion& TSRMLS_DC);
+
+//
+// Create a PHP instance of Ice_EncodingVersion.
+//
+bool createEncodingVersion(zval*, const Ice::EncodingVersion& TSRMLS_DC);
+
+//
+// Extracts the members of an encoding version.
+//
+bool extractEncodingVersion(zval*, Ice::EncodingVersion& TSRMLS_DC);
+
+//
+// Convert the given exception into its PHP equivalent.
+//
+zval* convertException(const Ice::Exception& TSRMLS_DC);
+
+//
+// Convert the exception and "throw" it.
+//
+void throwException(const Ice::Exception& TSRMLS_DC);
+
+//
+// Convert a Zend type (e.g., IS_BOOL, etc.) to a string for use in error messages.
+//
+std::string zendTypeToString(int);
+
+//
+// Raise RuntimeException with the given message.
+//
+void runtimeError(const char* TSRMLS_DC, ...);
+
+//
+// Raise InvalidArgumentException with the given message.
+//
+void invalidArgument(const char* TSRMLS_DC, ...);
+
+//
+// Invoke a method on a PHP object. The method must not take any arguments.
+//
+bool invokeMethod(zval*, const std::string& TSRMLS_DC);
+
+//
+// Invoke a method on a PHP object. The method must take one string argument.
+//
+bool invokeMethod(zval*, const std::string&, const std::string& TSRMLS_DC);
+
+//
+// Check inheritance.
+//
+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); }
+
+ zval* release() { zval* z = _zv; _zv = 0; return z; }
+
+private:
+ zval* _zv;
+};
+
+} // End of namespace IcePHP
+
+#endif