]> git.sesse.net Git - vlc/blobdiff - activex/utils.h
Avoid \r\n problems between platforms
[vlc] / activex / utils.h
index f15282b730b559b47dc21818a735e91cf8fdd052..58cd6557c335136dd61b1682c247774a7a867d10 100644 (file)
-/*****************************************************************************\r
- * utils.h: ActiveX control for VLC\r
- *****************************************************************************\r
- * Copyright (C) 2005 VideoLAN\r
- *\r
- * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
- *****************************************************************************/\r
-\r
-#ifndef __UTILS_H__\r
-#define __UTILS_H__\r
-\r
-#include <ole2.h>\r
-\r
-#include <vector>\r
-\r
-// utilities\r
-extern char *CStrFromBSTR(int codePage, BSTR bstr);\r
-extern BSTR BSTRFromCStr(int codePage, const char *s);\r
-\r
-// properties\r
-extern HRESULT GetObjectProperty(LPUNKNOWN object, DISPID dispID, VARIANT& v);\r
-\r
-// enumeration\r
-template<class T> class VLCEnum : IUnknown\r
-{\r
-\r
-public:\r
-\r
-    VLCEnum(REFIID riid, std::vector<T> &);\r
-    VLCEnum(const VLCEnum<T> &);\r
-    virtual ~VLCEnum() {};\r
-\r
-    VLCEnum<T>& operator=(const VLCEnum<T> &t);\r
-\r
-    // IUnknown methods\r
-    STDMETHODIMP QueryInterface(REFIID riid, void **);\r
-    STDMETHODIMP_(ULONG) AddRef(void);\r
-    STDMETHODIMP_(ULONG) Release(void);\r
-\r
-    // IEnumXXXX methods\r
-    STDMETHODIMP Next(ULONG, T *, ULONG *);\r
-    STDMETHODIMP Skip(ULONG);\r
-    STDMETHODIMP Reset(void);\r
-    // cloning is implemented by subclasses and must use copy constructor\r
-    //STDMETHODIMP Clone(VLCEnum<T> **);\r
-    // cloning is implemented by subclasses and must use copy constructor\r
-\r
-    typedef void (*retainer)(T);\r
-\r
-    void setRetainOperation(retainer retain) { _retain = retain; };\r
-\r
-private:\r
-\r
-    LONG                                _refcount;\r
-    std::vector<T>                      _v;\r
-    typename std::vector<T>::iterator   _i;\r
-    REFIID                              _riid;\r
-    retainer                            _retain;\r
-};\r
-\r
-template<class T>\r
-VLCEnum<T>::VLCEnum(REFIID riid, std::vector<T> &v) :\r
-    _refcount(1),\r
-    _v(v),\r
-    _riid(riid),\r
-    _retain(NULL)\r
-{\r
-    _i= v.begin();\r
-};\r
-\r
-template<class T>\r
-VLCEnum<T>::VLCEnum(const VLCEnum<T> &e) :\r
-    _refcount(1),\r
-    _v(e._v),\r
-    _riid(e._riid)\r
-{\r
-};\r
-\r
-template<class T>\r
-VLCEnum<T>& VLCEnum<T>::operator=(const VLCEnum<T> &e)\r
-{\r
-    this->_refcount = 1;\r
-    this->_riid = e._riid;\r
-    this->_v    = e._v;\r
-    this->_i    = e._i;\r
-};\r
-\r
-template<class T>\r
-STDMETHODIMP VLCEnum<T>::QueryInterface(REFIID riid, void **ppv)\r
-{\r
-    if( NULL == ppv ) return E_POINTER;\r
-    if( (IID_IUnknown == riid) \r
-     && ( _riid == riid) ) {\r
-        AddRef();\r
-        *ppv = reinterpret_cast<LPVOID>(this);\r
-        return NOERROR;\r
-    }\r
-    return E_NOINTERFACE;\r
-};\r
-\r
-template<class T>\r
-STDMETHODIMP_(ULONG) VLCEnum<T>::AddRef(void)\r
-{\r
-    return InterlockedIncrement(&_refcount);\r
-};\r
-\r
-template<class T>\r
-STDMETHODIMP_(ULONG) VLCEnum<T>::Release(void)\r
-{\r
-    ULONG refcount = InterlockedDecrement(&_refcount);\r
-    if( 0 == refcount )\r
-    {\r
-        delete this;\r
-        return 0;\r
-    }\r
-    return refcount;\r
-};\r
-\r
-template<class T>\r
-STDMETHODIMP VLCEnum<T>::Next(ULONG celt, T *rgelt, ULONG *pceltFetched)\r
-{\r
-    if( NULL == rgelt )\r
-        return E_POINTER;\r
-\r
-    if( (celt > 1) && (NULL == pceltFetched) )\r
-        return E_INVALIDARG;\r
-\r
-    ULONG c = 0;\r
-    typename std::vector<T>::iterator end = _v.end();\r
-\r
-    while( (c < celt) && (_i != end) )\r
-    {\r
-        rgelt[c] = *_i;\r
-        if( NULL != _retain ) _retain(rgelt[c]);\r
-        ++_i;\r
-        ++c;\r
-    }\r
-\r
-    if( NULL != pceltFetched )\r
-        *pceltFetched = c;\r
-\r
-    return (c == celt) ? S_OK : S_FALSE;\r
-};\r
-\r
-template<class T>\r
-STDMETHODIMP VLCEnum<T>::Skip(ULONG celt)\r
-{\r
-    ULONG c = 0;\r
-    typename std::vector<T>::iterator end = _v.end();\r
-\r
-    while( (c < celt) && (_i != end) )\r
-    {\r
-        ++_i;\r
-        ++c;\r
-    }\r
-    return (c == celt) ? S_OK : S_FALSE;\r
-};\r
-\r
-template<class T>\r
-STDMETHODIMP VLCEnum<T>::Reset(void)\r
-{\r
-    _i= _v.begin();\r
-    return S_OK;\r
-};\r
-\r
-#endif\r
-\r
+/*****************************************************************************
+ * utils.h: ActiveX control for VLC
+ *****************************************************************************
+ * Copyright (C) 2005 VideoLAN
+ *
+ * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+#ifndef __UTILS_H__
+#define __UTILS_H__
+
+#include <ole2.h>
+
+#include <vector>
+
+// utilities
+extern char *CStrFromBSTR(int codePage, BSTR bstr);
+extern BSTR BSTRFromCStr(int codePage, const char *s);
+
+// properties
+extern HRESULT GetObjectProperty(LPUNKNOWN object, DISPID dispID, VARIANT& v);
+
+// enumeration
+template<class T> class VLCEnum : IUnknown
+{
+
+public:
+
+    VLCEnum(REFIID riid, std::vector<T> &);
+    VLCEnum(const VLCEnum<T> &);
+    virtual ~VLCEnum() {};
+
+    VLCEnum<T>& operator=(const VLCEnum<T> &t);
+
+    // IUnknown methods
+    STDMETHODIMP QueryInterface(REFIID riid, void **);
+    STDMETHODIMP_(ULONG) AddRef(void);
+    STDMETHODIMP_(ULONG) Release(void);
+
+    // IEnumXXXX methods
+    STDMETHODIMP Next(ULONG, T *, ULONG *);
+    STDMETHODIMP Skip(ULONG);
+    STDMETHODIMP Reset(void);
+    // cloning is implemented by subclasses and must use copy constructor
+    //STDMETHODIMP Clone(VLCEnum<T> **);
+    // cloning is implemented by subclasses and must use copy constructor
+
+    typedef void (*retainer)(T);
+
+    void setRetainOperation(retainer retain) { _retain = retain; };
+
+private:
+
+    LONG                                _refcount;
+    std::vector<T>                      _v;
+    typename std::vector<T>::iterator   _i;
+    REFIID                              _riid;
+    retainer                            _retain;
+};
+
+template<class T>
+VLCEnum<T>::VLCEnum(REFIID riid, std::vector<T> &v) :
+    _refcount(1),
+    _v(v),
+    _riid(riid),
+    _retain(NULL)
+{
+    _i= v.begin();
+};
+
+template<class T>
+VLCEnum<T>::VLCEnum(const VLCEnum<T> &e) :
+    _refcount(1),
+    _v(e._v),
+    _riid(e._riid)
+{
+};
+
+template<class T>
+VLCEnum<T>& VLCEnum<T>::operator=(const VLCEnum<T> &e)
+{
+    this->_refcount = 1;
+    this->_riid = e._riid;
+    this->_v    = e._v;
+    this->_i    = e._i;
+};
+
+template<class T>
+STDMETHODIMP VLCEnum<T>::QueryInterface(REFIID riid, void **ppv)
+{
+    if( NULL == ppv ) return E_POINTER;
+    if( (IID_IUnknown == riid) 
+     && ( _riid == riid) ) {
+        AddRef();
+        *ppv = reinterpret_cast<LPVOID>(this);
+        return NOERROR;
+    }
+    return E_NOINTERFACE;
+};
+
+template<class T>
+STDMETHODIMP_(ULONG) VLCEnum<T>::AddRef(void)
+{
+    return InterlockedIncrement(&_refcount);
+};
+
+template<class T>
+STDMETHODIMP_(ULONG) VLCEnum<T>::Release(void)
+{
+    ULONG refcount = InterlockedDecrement(&_refcount);
+    if( 0 == refcount )
+    {
+        delete this;
+        return 0;
+    }
+    return refcount;
+};
+
+template<class T>
+STDMETHODIMP VLCEnum<T>::Next(ULONG celt, T *rgelt, ULONG *pceltFetched)
+{
+    if( NULL == rgelt )
+        return E_POINTER;
+
+    if( (celt > 1) && (NULL == pceltFetched) )
+        return E_INVALIDARG;
+
+    ULONG c = 0;
+    typename std::vector<T>::iterator end = _v.end();
+
+    while( (c < celt) && (_i != end) )
+    {
+        rgelt[c] = *_i;
+        if( NULL != _retain ) _retain(rgelt[c]);
+        ++_i;
+        ++c;
+    }
+
+    if( NULL != pceltFetched )
+        *pceltFetched = c;
+
+    return (c == celt) ? S_OK : S_FALSE;
+};
+
+template<class T>
+STDMETHODIMP VLCEnum<T>::Skip(ULONG celt)
+{
+    ULONG c = 0;
+    typename std::vector<T>::iterator end = _v.end();
+
+    while( (c < celt) && (_i != end) )
+    {
+        ++_i;
+        ++c;
+    }
+    return (c == celt) ? S_OK : S_FALSE;
+};
+
+template<class T>
+STDMETHODIMP VLCEnum<T>::Reset(void)
+{
+    _i= _v.begin();
+    return S_OK;
+};
+
+#endif
+