safe: Fix safe arithmetic functions
This commit is contained in:
		
							parent
							
								
									f45aed10ee
								
							
						
					
					
						commit
						64b65e1406
					
				
							
								
								
									
										80
									
								
								Code/Dqn.h
									
									
									
									
									
								
							
							
						
						
									
										80
									
								
								Code/Dqn.h
									
									
									
									
									
								
							@ -96,7 +96,7 @@
 | 
				
			|||||||
        // Print
 | 
					        // Print
 | 
				
			||||||
        FILE *handle = (type == Dqn_LogType::Error) ? stderr : stdout;
 | 
					        FILE *handle = (type == Dqn_LogType::Error) ? stderr : stdout;
 | 
				
			||||||
        fprintf(handle,
 | 
					        fprintf(handle,
 | 
				
			||||||
                "%s %.*s %05zu %.*s ",
 | 
					                "%s %.*s %05I64u %.*s ",
 | 
				
			||||||
                Dqn_LogTypeString[DQN_CAST(int) type],
 | 
					                Dqn_LogTypeString[DQN_CAST(int) type],
 | 
				
			||||||
                (int)file_ptr_len,
 | 
					                (int)file_ptr_len,
 | 
				
			||||||
                file_ptr,
 | 
					                file_ptr,
 | 
				
			||||||
@ -1718,7 +1718,7 @@ DQN_API Dqn_b32 Dqn_FixedString_AppendFmtV(Dqn_FixedString<MAX_> *str, char cons
 | 
				
			|||||||
    Dqn_isize require = stbsp_vsnprintf(nullptr, 0, fmt, va) + 1;
 | 
					    Dqn_isize require = stbsp_vsnprintf(nullptr, 0, fmt, va) + 1;
 | 
				
			||||||
    Dqn_isize space   = MAX_ - str->size;
 | 
					    Dqn_isize space   = MAX_ - str->size;
 | 
				
			||||||
    Dqn_b32 result    = require <= space;
 | 
					    Dqn_b32 result    = require <= space;
 | 
				
			||||||
    DQN_ASSERT_MSG(require <= space, "(require=%Id, space=%Id)", require, space);
 | 
					    DQN_ASSERT_MSG(require <= space, "(require=%I64d, space=%I64d)", require, space);
 | 
				
			||||||
    str->size += stbsp_vsnprintf(str->data + str->size, static_cast<int>(space), fmt, va2);
 | 
					    str->size += stbsp_vsnprintf(str->data + str->size, static_cast<int>(space), fmt, va2);
 | 
				
			||||||
    va_end(va2);
 | 
					    va_end(va2);
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
@ -1917,9 +1917,9 @@ Dqn_HashTable<T> Dqn_HashTable_InitWithMemory(void *mem, Dqn_isize mem_size)
 | 
				
			|||||||
    //
 | 
					    //
 | 
				
			||||||
    Dqn_isize bytes_required = bytes_for_values + bytes_for_usage_bitset;
 | 
					    Dqn_isize bytes_required = bytes_for_values + bytes_for_usage_bitset;
 | 
				
			||||||
    DQN_ASSERT_MSG(bytes_required <= mem_size,
 | 
					    DQN_ASSERT_MSG(bytes_required <= mem_size,
 | 
				
			||||||
                   "(bytes_for_values = %Id, bytes_for_usage_bitset = %Id, mem_size = %Id)",
 | 
					                   "(bytes_for_values = %I64d, bytes_for_usage_bitset = %I64d, mem_size = %I64d)",
 | 
				
			||||||
                   bytes_for_values, bytes_for_usage_bitset, mem_size);
 | 
					                   bytes_for_values, bytes_for_usage_bitset, mem_size);
 | 
				
			||||||
    DQN_ASSERT_MSG(bytes_required >= 0, "(bytes_required = %Iu)", bytes_required);
 | 
					    DQN_ASSERT_MSG(bytes_required >= 0, "(bytes_required = %I64u)", bytes_required);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Dqn_HashTable<T> result   = {};
 | 
					    Dqn_HashTable<T> result   = {};
 | 
				
			||||||
    result.values             = DQN_CAST(T *) mem;
 | 
					    result.values             = DQN_CAST(T *) mem;
 | 
				
			||||||
@ -1989,7 +1989,7 @@ Dqn_b32 Dqn_HashTable_Erase(Dqn_HashTable<T> *table, Dqn_u64 key)
 | 
				
			|||||||
        table->count--;
 | 
					        table->count--;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DQN_ASSERT_MSG(table->count >= 0, "(count = %Id)");
 | 
					    DQN_ASSERT_MSG(table->count >= 0, "(count = %I64d)");
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2769,7 +2769,7 @@ DQN_API void Dqn_LogV(Dqn_LogType type, char const *file, Dqn_usize file_len, ch
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    FILE *handle = (type == Dqn_LogType::Error) ? stderr : stdout;
 | 
					    FILE *handle = (type == Dqn_LogType::Error) ? stderr : stdout;
 | 
				
			||||||
    fprintf(handle,
 | 
					    fprintf(handle,
 | 
				
			||||||
            "[%s:%.*s:%05zu:%.*s] ",
 | 
					            "[%s:%.*s:%05I64u:%.*s] ",
 | 
				
			||||||
            Dqn_LogTypeString[DQN_CAST(int) type],
 | 
					            Dqn_LogTypeString[DQN_CAST(int) type],
 | 
				
			||||||
            (int)file_ptr_len,
 | 
					            (int)file_ptr_len,
 | 
				
			||||||
            file_ptr,
 | 
					            file_ptr,
 | 
				
			||||||
@ -3445,7 +3445,7 @@ DQN_API Dqn_b32 Dqn_String_AppendFmtV(Dqn_String *str, char const *fmt, va_list
 | 
				
			|||||||
    Dqn_isize require = stbsp_vsnprintf(nullptr, 0, fmt, va) + 1;
 | 
					    Dqn_isize require = stbsp_vsnprintf(nullptr, 0, fmt, va) + 1;
 | 
				
			||||||
    Dqn_isize space   = str->cap - str->size;
 | 
					    Dqn_isize space   = str->cap - str->size;
 | 
				
			||||||
    Dqn_b32 result    = require <= space;
 | 
					    Dqn_b32 result    = require <= space;
 | 
				
			||||||
    DQN_ASSERT_MSG(require <= space, "(require=%Id, space=%Id)", require, space);
 | 
					    DQN_ASSERT_MSG(require <= space, "(require=%I64d, space=%I64d)", require, space);
 | 
				
			||||||
    str->size += stbsp_vsnprintf(str->str + str->size, static_cast<int>(space), fmt, va2);
 | 
					    str->size += stbsp_vsnprintf(str->str + str->size, static_cast<int>(space), fmt, va2);
 | 
				
			||||||
    va_end(va2);
 | 
					    va_end(va2);
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
@ -3587,7 +3587,7 @@ DQN_API Dqn_ArenaAllocator Dqn_ArenaAllocator_InitWithNewAllocator(Dqn_Allocator
 | 
				
			|||||||
    result.tracer             = tracer;
 | 
					    result.tracer             = tracer;
 | 
				
			||||||
    if (size > 0)
 | 
					    if (size > 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        DQN_ASSERT_MSG(size >= DQN_ISIZEOF(*result.curr_mem_block), "(%zu >= %zu) There needs to be enough space to encode the Dqn_ArenaAllocatorBlock struct into the memory buffer", size, sizeof(*result.curr_mem_block));
 | 
					        DQN_ASSERT_MSG(size >= DQN_ISIZEOF(*result.curr_mem_block), "(%I64u >= %I64u) There needs to be enough space to encode the Dqn_ArenaAllocatorBlock struct into the memory buffer", size, sizeof(*result.curr_mem_block));
 | 
				
			||||||
        Dqn_ArenaAllocatorBlock *mem_block = Dqn_ArenaAllocator__AllocateBlock(&result, size DQN_CALL_SITE_ARGS_INPUT);
 | 
					        Dqn_ArenaAllocatorBlock *mem_block = Dqn_ArenaAllocator__AllocateBlock(&result, size DQN_CALL_SITE_ARGS_INPUT);
 | 
				
			||||||
        Dqn_ArenaAllocator__AttachBlock(&result, mem_block);
 | 
					        Dqn_ArenaAllocator__AttachBlock(&result, mem_block);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -3602,7 +3602,7 @@ DQN_API Dqn_ArenaAllocator Dqn_ArenaAllocator_InitWithAllocator(Dqn_Allocator *a
 | 
				
			|||||||
    result.tracer             = tracer;
 | 
					    result.tracer             = tracer;
 | 
				
			||||||
    if (size > 0)
 | 
					    if (size > 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        DQN_ASSERT_MSG(size >= DQN_ISIZEOF(*result.curr_mem_block), "(%zu >= %zu) There needs to be enough space to encode the Dqn_ArenaAllocatorBlock struct into the memory buffer", size, sizeof(*result.curr_mem_block));
 | 
					        DQN_ASSERT_MSG(size >= DQN_ISIZEOF(*result.curr_mem_block), "(%I64u >= %I64u) There needs to be enough space to encode the Dqn_ArenaAllocatorBlock struct into the memory buffer", size, sizeof(*result.curr_mem_block));
 | 
				
			||||||
        Dqn_ArenaAllocatorBlock *mem_block = Dqn_ArenaAllocator__AllocateBlock(&result, size DQN_CALL_SITE_ARGS_INPUT);
 | 
					        Dqn_ArenaAllocatorBlock *mem_block = Dqn_ArenaAllocator__AllocateBlock(&result, size DQN_CALL_SITE_ARGS_INPUT);
 | 
				
			||||||
        Dqn_ArenaAllocator__AttachBlock(&result, mem_block);
 | 
					        Dqn_ArenaAllocator__AttachBlock(&result, mem_block);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -3614,7 +3614,7 @@ DQN_API Dqn_ArenaAllocator Dqn_ArenaAllocator_InitWithMemory(void *memory, Dqn_i
 | 
				
			|||||||
    Dqn_ArenaAllocator result = {};
 | 
					    Dqn_ArenaAllocator result = {};
 | 
				
			||||||
    result.tracer             = tracer;
 | 
					    result.tracer             = tracer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DQN_ASSERT_MSG(size >= DQN_ISIZEOF(*result.curr_mem_block), "(%zu >= %zu) There needs to be enough space to encode the Dqn_ArenaAllocatorBlock struct into the memory buffer", size, sizeof(*result.curr_mem_block));
 | 
					    DQN_ASSERT_MSG(size >= DQN_ISIZEOF(*result.curr_mem_block), "(%I64u >= %I64u) There needs to be enough space to encode the Dqn_ArenaAllocatorBlock struct into the memory buffer", size, sizeof(*result.curr_mem_block));
 | 
				
			||||||
    result.backup_allocator = Dqn_Allocator_InitWithNull();
 | 
					    result.backup_allocator = Dqn_Allocator_InitWithNull();
 | 
				
			||||||
    auto *mem_block     = DQN_CAST(Dqn_ArenaAllocatorBlock *) memory;
 | 
					    auto *mem_block     = DQN_CAST(Dqn_ArenaAllocatorBlock *) memory;
 | 
				
			||||||
    *mem_block          = {};
 | 
					    *mem_block          = {};
 | 
				
			||||||
@ -3821,96 +3821,86 @@ DQN_API Dqn_b32 Dqn_Bit_IsNotSet(Dqn_u64 bits, Dqn_u64 bits_to_check)
 | 
				
			|||||||
// -------------------------------------------------------------------------------------------------
 | 
					// -------------------------------------------------------------------------------------------------
 | 
				
			||||||
DQN_API Dqn_i64 Dqn_Safe_AddI64(Dqn_i64 a, Dqn_i64 b)
 | 
					DQN_API Dqn_i64 Dqn_Safe_AddI64(Dqn_i64 a, Dqn_i64 b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DQN_ASSERT_MSG(a <= DQN_I64_MAX - b, "%zu <= %zu", a, DQN_I64_MAX - b);
 | 
					    DQN_ASSERT_MSG(a <= DQN_I64_MAX - b, "%I64u <= %I64u", a, DQN_I64_MAX - b);
 | 
				
			||||||
    Dqn_i64 result = a + b;
 | 
					    Dqn_i64 result = (a <= DQN_I64_MAX - b) ? (a + b) : DQN_I64_MAX;
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DQN_API Dqn_i64 Dqn_Safe_MulI64(Dqn_i64 a, Dqn_i64 b)
 | 
					DQN_API Dqn_i64 Dqn_Safe_MulI64(Dqn_i64 a, Dqn_i64 b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DQN_ASSERT_MSG(a <= DQN_I64_MAX / b , "%zu <= %zu", a, DQN_I64_MAX / b);
 | 
					    DQN_ASSERT_MSG(a <= DQN_I64_MAX / b , "%I64u <= %I64u", a, DQN_I64_MAX / b);
 | 
				
			||||||
    Dqn_i64 result = a * b;
 | 
					    Dqn_i64 result = (a <= DQN_I64_MAX / b) ? (a * b) : DQN_I64_MAX;
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DQN_API Dqn_u64 Dqn_Safe_AddU64(Dqn_u64 a, Dqn_u64 b)
 | 
					DQN_API Dqn_u64 Dqn_Safe_AddU64(Dqn_u64 a, Dqn_u64 b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DQN_ASSERT_MSG(a <= DQN_U64_MAX - b, "%zu <= %zu", a, DQN_U64_MAX - b);
 | 
					    DQN_ASSERT_MSG(a <= DQN_U64_MAX - b, "%I64u <= %I64u", a, DQN_U64_MAX - b);
 | 
				
			||||||
    Dqn_u64 result = a + b;
 | 
					    Dqn_u64 result = (a <= DQN_U64_MAX / b) ? (a * b) : DQN_U64_MAX;
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DQN_API Dqn_u64 Dqn_Safe_SubU64(Dqn_u64 a, Dqn_u64 b)
 | 
					DQN_API Dqn_u64 Dqn_Safe_SubU64(Dqn_u64 a, Dqn_u64 b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DQN_ASSERT_MSG(a >= b, "%zu >= %zu", a, b);
 | 
					    DQN_ASSERT_MSG(a >= b, "%I64u >= %I64u", a, b);
 | 
				
			||||||
    Dqn_u64 result = a - b;
 | 
					    Dqn_u64 result = (a >= b) ? (a - b) : 0;
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DQN_API Dqn_u32 Dqn_Safe_SubU32(Dqn_u32 a, Dqn_u32 b)
 | 
					DQN_API Dqn_u32 Dqn_Safe_SubU32(Dqn_u32 a, Dqn_u32 b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DQN_ASSERT_MSG(a >= b, "%zu >= %zu", a, b);
 | 
					    DQN_ASSERT_MSG(a >= b, "%I64u >= %I64u", a, b);
 | 
				
			||||||
    Dqn_u32 result = a - b;
 | 
					    Dqn_u32 result = (a >= b) ? (a - b) : 0;
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DQN_API Dqn_u64 Dqn_Safe_MulU64(Dqn_u64 a, Dqn_u64 b)
 | 
					DQN_API Dqn_u64 Dqn_Safe_MulU64(Dqn_u64 a, Dqn_u64 b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DQN_ASSERT_MSG(a <= DQN_U64_MAX / b , "%zu <= %zu", a, DQN_U64_MAX / b);
 | 
					    DQN_ASSERT_MSG(a <= DQN_U64_MAX / b , "%I64u <= %I64u", a, DQN_U64_MAX / b);
 | 
				
			||||||
    Dqn_u64 result = a * b;
 | 
					    Dqn_u64 result = (a <= DQN_U64_MAX / b) ? (a * b) : DQN_U64_MAX;
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DQN_API int Dqn_Safe_TruncateISizeToInt(Dqn_isize val)
 | 
					DQN_API int Dqn_Safe_TruncateISizeToInt(Dqn_isize val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DQN_ASSERT_MSG(val >= DQN_I32_MAX && val <= DQN_I32_MAX, "%zd >= %zd && %zd <= %zd", val, DQN_I32_MAX, val, DQN_I32_MAX);
 | 
					    DQN_ASSERT_MSG(val >= DQN_I32_MIN && val <= DQN_I32_MAX, "%I64d >= %I64d && %I64d <= %I64d", val, DQN_I32_MAX, val, DQN_I32_MAX);
 | 
				
			||||||
    auto result = (int)val;
 | 
					    auto result = (val >= DQN_I32_MIN && val <= DQN_I32_MAX) ? DQN_CAST(int)val : 0;
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DQN_API Dqn_i32 Dqn_Safe_TruncateISizeToI32(Dqn_isize val)
 | 
					DQN_API Dqn_i32 Dqn_Safe_TruncateISizeToI32(Dqn_isize val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DQN_ASSERT_MSG(val >= DQN_I32_MIN && val <= DQN_I32_MAX, "%zd >= %zd && %zd <= %zd", val, DQN_I32_MIN, val, DQN_I32_MAX);
 | 
					    DQN_ASSERT_MSG(val >= DQN_I32_MIN && val <= DQN_I32_MAX, "%I64d >= %I64d && %I64d <= %I64d", val, DQN_I32_MIN, val, DQN_I32_MAX);
 | 
				
			||||||
    auto result = DQN_CAST(Dqn_i32)val;
 | 
					    auto result = (val >= DQN_I32_MIN && val <= DQN_I32_MAX) ? DQN_CAST(Dqn_i32)val : 0;
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
DQN_API Dqn_i8 Dqn_Safe_TruncateISizeToI8(Dqn_isize val)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    DQN_ASSERT_MSG(val >= DQN_I8_MIN && val <= DQN_I8_MAX, "%zd >= %zd && %zd <= %zd", val, DQN_I8_MIN, val, DQN_I8_MAX);
 | 
					 | 
				
			||||||
    auto result = DQN_CAST(Dqn_i8)val;
 | 
					 | 
				
			||||||
    return result;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DQN_API Dqn_u32 Dqn_Safe_TruncateUSizeToU32(Dqn_u64 val)
 | 
					DQN_API Dqn_u32 Dqn_Safe_TruncateUSizeToU32(Dqn_u64 val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DQN_ASSERT_MSG(val <= DQN_U32_MAX, "%zu <= %zu", val, DQN_U32_MAX);
 | 
					    DQN_ASSERT_MSG(val <= DQN_U32_MAX, "%I64u <= %I64u", val, DQN_U32_MAX);
 | 
				
			||||||
    auto result = DQN_CAST(Dqn_u32)val;
 | 
					    auto result = (val <= DQN_U32_MAX) ? DQN_CAST(Dqn_u32)val : DQN_U32_MAX;
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DQN_API int Dqn_Safe_TruncateUSizeToI32(Dqn_usize val)
 | 
					DQN_API Dqn_i32 Dqn_Safe_TruncateUSizeToI32(Dqn_usize val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DQN_ASSERT_MSG(val <= DQN_I32_MAX, "%zu <= %zd", val, DQN_I32_MAX);
 | 
					    DQN_ASSERT_MSG(val <= DQN_I32_MAX, "%I64u <= %I64d", val, DQN_I32_MAX);
 | 
				
			||||||
    auto result = DQN_CAST(int)val;
 | 
					    auto result = (val <= DQN_I32_MAX) ? DQN_CAST(int)val : DQN_I32_MAX;
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
DQN_API int Dqn_Safe_TruncateUSizeToInt(Dqn_usize val)
 | 
					DQN_API int Dqn_Safe_TruncateUSizeToInt(Dqn_usize val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DQN_ASSERT_MSG(val <= DQN_I32_MAX, "%zu <= %zd", val, DQN_I32_MAX);
 | 
					    DQN_ASSERT_MSG(val <= DQN_I32_MAX, "%I64u <= %I64d", val, DQN_I32_MAX);
 | 
				
			||||||
    auto result = DQN_CAST(int)val;
 | 
					    auto result = (val <= DQN_I32_MAX) ? DQN_CAST(int)val : DQN_I32_MAX;
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DQN_API Dqn_isize Dqn_Safe_TruncateUSizeToISize(Dqn_usize val)
 | 
					DQN_API Dqn_isize Dqn_Safe_TruncateUSizeToISize(Dqn_usize val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DQN_ASSERT_MSG(val <= DQN_CAST(Dqn_usize)DQN_ISIZE_MAX, "%zu <= %zu", val, DQN_CAST(Dqn_usize)DQN_ISIZE_MAX);
 | 
					    DQN_ASSERT_MSG(val <= DQN_ISIZE_MAX, "%I64u <= %I64u", val, DQN_CAST(Dqn_usize)DQN_ISIZE_MAX);
 | 
				
			||||||
    auto result = DQN_CAST(Dqn_isize)val;
 | 
					    auto result = (val <= DQN_ISIZE_MAX) ? DQN_CAST(Dqn_isize)val : DQN_ISIZE_MAX;
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user