28 #if !defined(_SCRAT_UTIL_H_)
29 #define _SCRAT_UTIL_H_
42 void UNUSED(
const T&) {
49 typedef std::basic_string<SQChar> string;
58 static std::wstring ascii_string_to_wstring(
const std::string& str)
60 return std::wstring(str.begin(), str.end());
66 static std::string ascii_wstring_to_string(
const std::wstring& wstr)
68 return std::string(wstr.begin(), wstr.end());
71 static std::wstring (*string_to_wstring)(
const std::string& str) = ascii_string_to_wstring;
72 static std::string (*wstring_to_string)(
const std::wstring& wstr) = ascii_wstring_to_string;
81 static HSQUIRRELVM& staticVm() {
82 static HSQUIRRELVM vm;
92 static HSQUIRRELVM
Get() {
102 static void Set(HSQUIRRELVM vm) {
107 #if !defined (SCRAT_NO_ERROR_CHECKING)
135 static Error instance;
149 static string FormatTypeError(HSQUIRRELVM vm, SQInteger idx,
const string& expectedType) {
150 string err = _SC(
"wrong type (") + expectedType + _SC(
" expected");
151 if (SQ_SUCCEEDED(sq_typeof(vm, idx))) {
152 const SQChar* actualType;
154 sq_getstring(vm, -1, &actualType);
156 err = err + _SC(
", got ") + actualType + _SC(
")");
158 err = err + _SC(
", got unknown)");
185 string err = errMap[vm];
200 return errMap.find(vm) != errMap.end();
210 void Throw(HSQUIRRELVM vm,
const string& err) {
212 if (errMap.find(vm) == errMap.end()) {
220 std::map< HSQUIRRELVM, string > errMap;
233 static bool& errorHandling() {
234 static bool eh =
true;
245 return errorHandling();
255 errorHandling() = enable;
267 inline string LastErrorString( HSQUIRRELVM vm ) {
270 if(sq_gettype(vm, -1) == OT_NULL) {
274 sq_getstring(vm, -1, &sqErr);
275 return string(sqErr);
295 unsigned int* m_RefCount;
341 if (copy.
Get() != NULL)
345 m_RefCount = copy.m_RefCount;
366 if (copy.
Get() != NULL)
368 m_Ptr =
static_cast<T*
>(copy.
Get());
370 m_RefCount = copy.m_RefCount;
403 if (copy.
Get() != NULL)
407 m_RefCount = copy.m_RefCount;
435 if (copy.
Get() != NULL)
437 m_Ptr =
static_cast<T*
>(copy.
Get());
439 m_RefCount = copy.m_RefCount;
463 m_RefCount =
new unsigned int;
480 m_Ptr =
static_cast<T*
>(ptr);
482 m_RefCount =
new unsigned int;
494 if (*m_RefCount == 1)
511 operator bool()
const
513 return m_Ptr != NULL;
522 return m_Ptr == NULL;
529 template <
typename U>
532 return m_Ptr == right.m_Ptr;
541 return m_Ptr == right.m_Ptr;
548 template <
typename U>
551 return left.m_Ptr == right;
560 return left.m_Ptr == right;
567 template <
typename U>
570 return left == right.m_Ptr;
579 return left == right.m_Ptr;
586 template <
typename U>
589 return m_Ptr != right.m_Ptr;
598 return m_Ptr != right.m_Ptr;
605 template <
typename U>
608 return left.m_Ptr != right;
617 return left.m_Ptr != right;
624 template <
typename U>
627 return left != right.m_Ptr;
636 return left != right.m_Ptr;
645 assert(m_Ptr != NULL);
655 assert(m_Ptr != NULL);
static HSQUIRRELVM Get()
Definition: sqratUtil.h:92
SharedPtr< T > & operator=(const SharedPtr< T > ©)
Definition: sqratUtil.h:397
SharedPtr< T > & operator=(const SharedPtr< U > ©)
Definition: sqratUtil.h:431
void Init(T *ptr)
Definition: sqratUtil.h:457
SharedPtr()
Definition: sqratUtil.h:301
static bool IsEnabled()
Definition: sqratUtil.h:244
void Reset()
Definition: sqratUtil.h:490
T * Get() const
Definition: sqratUtil.h:665
static void Enable(bool enable)
Definition: sqratUtil.h:254
~SharedPtr()
Definition: sqratUtil.h:384
static string FormatTypeError(HSQUIRRELVM vm, SQInteger idx, const string &expectedType)
Definition: sqratUtil.h:149
Definition: sqratUtil.h:126
Definition: sqratUtil.h:231
void Clear(HSQUIRRELVM vm)
Definition: sqratUtil.h:170
SharedPtr(const SharedPtr< U > ©)
Definition: sqratUtil.h:364
void Init(U *ptr)
Definition: sqratUtil.h:476
bool operator==(const SharedPtr< U > &right) const
Definition: sqratUtil.h:530
string Message(HSQUIRRELVM vm)
Definition: sqratUtil.h:183
Definition: sqratUtil.h:291
T & operator*() const
Definition: sqratUtil.h:643
SharedPtr(const SharedPtr< T > ©)
Definition: sqratUtil.h:339
static Error & Instance()
Definition: sqratUtil.h:134
bool operator!=(const SharedPtr< U > &right) const
Definition: sqratUtil.h:587
T * operator->() const
Definition: sqratUtil.h:653
void Throw(HSQUIRRELVM vm, const string &err)
Definition: sqratUtil.h:210
static void Set(HSQUIRRELVM vm)
Definition: sqratUtil.h:102
SharedPtr(U *ptr)
Definition: sqratUtil.h:328
SharedPtr(T *ptr)
Definition: sqratUtil.h:314
Helper class that defines a VM that can be used as a fallback VM in case no other one is given to a p...
Definition: sqratUtil.h:79
bool operator!() const
Definition: sqratUtil.h:520
bool Occurred(HSQUIRRELVM vm)
Definition: sqratUtil.h:198