mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-06-09 11:29:39 +00:00
143 lines
2.7 KiB
C++
143 lines
2.7 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
* vim: set ts=8 sts=4 et sw=4 tw=99:
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef vm_PosixNSPR_h
|
|
#define vm_PosixNSPR_h
|
|
|
|
#ifdef JS_POSIX_NSPR
|
|
|
|
#include <pthread.h>
|
|
#include <stdint.h>
|
|
|
|
namespace nspr {
|
|
class Thread;
|
|
class Lock;
|
|
class CondVar;
|
|
};
|
|
|
|
typedef nspr::Thread PRThread;
|
|
typedef nspr::Lock PRLock;
|
|
typedef nspr::CondVar PRCondVar;
|
|
|
|
enum PRThreadType {
|
|
PR_USER_THREAD,
|
|
PR_SYSTEM_THREAD
|
|
};
|
|
|
|
enum PRThreadPriority
|
|
{
|
|
PR_PRIORITY_FIRST = 0,
|
|
PR_PRIORITY_LOW = 0,
|
|
PR_PRIORITY_NORMAL = 1,
|
|
PR_PRIORITY_HIGH = 2,
|
|
PR_PRIORITY_URGENT = 3,
|
|
PR_PRIORITY_LAST = 3
|
|
};
|
|
|
|
enum PRThreadScope {
|
|
PR_LOCAL_THREAD,
|
|
PR_GLOBAL_THREAD,
|
|
PR_GLOBAL_BOUND_THREAD
|
|
};
|
|
|
|
enum PRThreadState {
|
|
PR_JOINABLE_THREAD,
|
|
PR_UNJOINABLE_THREAD
|
|
};
|
|
|
|
PRThread*
|
|
PR_CreateThread(PRThreadType type,
|
|
void (*start)(void* arg),
|
|
void* arg,
|
|
PRThreadPriority priority,
|
|
PRThreadScope scope,
|
|
PRThreadState state,
|
|
uint32_t stackSize);
|
|
|
|
typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
|
|
|
|
PRStatus
|
|
PR_JoinThread(PRThread* thread);
|
|
|
|
PRThread*
|
|
PR_GetCurrentThread();
|
|
|
|
PRStatus
|
|
PR_SetCurrentThreadName(const char* name);
|
|
|
|
typedef void (*PRThreadPrivateDTOR)(void* priv);
|
|
|
|
PRStatus
|
|
PR_NewThreadPrivateIndex(unsigned* newIndex, PRThreadPrivateDTOR destructor);
|
|
|
|
PRStatus
|
|
PR_SetThreadPrivate(unsigned index, void* priv);
|
|
|
|
void*
|
|
PR_GetThreadPrivate(unsigned index);
|
|
|
|
struct PRCallOnceType {
|
|
int initialized;
|
|
int32_t inProgress;
|
|
PRStatus status;
|
|
};
|
|
|
|
typedef PRStatus (*PRCallOnceFN)();
|
|
|
|
PRStatus
|
|
PR_CallOnce(PRCallOnceType* once, PRCallOnceFN func);
|
|
|
|
typedef PRStatus (*PRCallOnceWithArgFN)(void*);
|
|
|
|
PRStatus
|
|
PR_CallOnceWithArg(PRCallOnceType* once, PRCallOnceWithArgFN func, void* arg);
|
|
|
|
PRLock*
|
|
PR_NewLock();
|
|
|
|
void
|
|
PR_DestroyLock(PRLock* lock);
|
|
|
|
void
|
|
PR_Lock(PRLock* lock);
|
|
|
|
PRStatus
|
|
PR_Unlock(PRLock* lock);
|
|
|
|
PRCondVar*
|
|
PR_NewCondVar(PRLock* lock);
|
|
|
|
void
|
|
PR_DestroyCondVar(PRCondVar* cvar);
|
|
|
|
PRStatus
|
|
PR_NotifyCondVar(PRCondVar* cvar);
|
|
|
|
PRStatus
|
|
PR_NotifyAllCondVar(PRCondVar* cvar);
|
|
|
|
#define PR_INTERVAL_MIN 1000UL
|
|
#define PR_INTERVAL_MAX 100000UL
|
|
|
|
#define PR_INTERVAL_NO_WAIT 0UL
|
|
#define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL
|
|
|
|
uint32_t
|
|
PR_MillisecondsToInterval(uint32_t milli);
|
|
|
|
uint32_t
|
|
PR_MicrosecondsToInterval(uint32_t micro);
|
|
|
|
uint32_t
|
|
PR_TicksPerSecond();
|
|
|
|
PRStatus
|
|
PR_WaitCondVar(PRCondVar* cvar, uint32_t timeout);
|
|
|
|
#endif /* JS_POSIX_NSPR */
|
|
|
|
#endif /* vm_PosixNSPR_h */
|