#ifndef _FAPP_INTERNAL_REQUEST_MANAGERT_H_
#define _FAPP_INTERNAL_REQUEST_MANAGERT_H_
-#include <limits.h>
-
#include <FOspConfig.h>
#include <FBaseColHashMapT.h>
-
#include <FBaseSysLog.h>
-namespace Tizen { namespace Base
+namespace Tizen { namespace Base { namespace Runtime
{
-class String;
-}}
+class IEventListener;
+}}}
namespace Tizen { namespace App
{
public:
typedef Tizen::Base::Collection::HashMapT<int, T*> RequestListType;
typedef Tizen::Base::Collection::IMapEnumeratorT<int, T*> RequestListEnumType;
+ typedef bool (*Pred)(const T&, Tizen::Base::Runtime::IEventListener*);
+
+ _RequestManagerT(void);
+
+ ~_RequestManagerT(void);
+
+ int InsertItem(T* pItem);
- _RequestManagerT(void)
- : __reqId(-1)
- {
- __requestList.Construct();
- }
-
- ~_RequestManagerT(void)
- {
- RequestListEnumType* pIter = __requestList.GetMapEnumeratorN();
- if (pIter == null)
- {
- return;
- }
-
- while (pIter->MoveNext() == E_SUCCESS)
- {
- T* pInfo = null;
- result r = pIter->GetValue(pInfo);
-
- if (IsFailed(r))
- {
- continue;
- }
-
- delete pInfo;
- }
-
- delete pIter;
- }
-
- int InsertItem(T* pItem)
- {
- SysTryReturn(NID_APP, pItem != null, -1, E_INVALID_ARG, "[E_INVALID_ARG] Empty argument.");
-
-#if 0
- // [INFO] temporary disable due to OBS build system
- __sync_add_and_fetch(&__reqId, 1);
-
- // [TODO] awkward implementation after overflow
- // overflow detection
- __sync_bool_compare_and_swap(&__reqId, INT_MAX, 1);
-#else
- __reqId++;
- if (__reqId >= INT_MAX)
- {
- __reqId = 1;
- }
-#endif
- SysLog(NID_APP, "Current request ID : %d.", __reqId);
-
- pItem->reqId = __reqId;
- __requestList.Add(__reqId, pItem);
-
- return __reqId;
- }
-
- void RemoveItem(int reqId)
- {
- T* pItem = FindItem(reqId);
- if (pItem)
- {
- __requestList.Remove(reqId);
- delete pItem;
- }
- }
-
- void RemoveItem(T* pItem)
- {
- RequestListEnumType* pIter = __requestList.GetMapEnumeratorN();
- if (pItem == null || pIter == null)
- {
- return;
- }
-
- while (pIter->MoveNext() == E_SUCCESS)
- {
- T* pInfo = null;
- result r = pIter->GetValue(pInfo);
-
- if (pInfo == pItem)
- {
- int id = -1;
- r = pIter->GetKey(id);
- if (r == E_SUCCESS)
- {
- __requestList.Remove(id);
- }
-
- delete pItem;
- delete pIter;
-
- return;
- }
- }
-
- delete pIter;
- }
-
- T* FindItem(int reqId) const
- {
- T* pItem = null;
- result r = __requestList.GetValue(reqId, pItem);
-
- return (r == E_SUCCESS) ? pItem : null;
- }
+ void RemoveItem(int reqId);
+
+ void RemoveItem(T* pItem);
+
+ T* FindItemWithListener(Pred, Tizen::Base::Runtime::IEventListener* pListener) const;
+
+ T* FindItem(int reqId) const;
+
+ void Dump(void) const;
private:
_RequestManagerT(const T& rhs);
RequestListType __requestList;
}; // _RequestManagerT
+
} } // Tizen::App
#endif // _FAPP_INTERNAL_REQUEST_MANAGERT_H_