File indexing completed on 2024-04-28 16:59:49

0001 /*
0002    Copyright (C) 2013 Andreas Hartmetz <ahartmetz@gmail.com>
0003 
0004    This library is free software; you can redistribute it and/or
0005    modify it under the terms of the GNU Library General Public
0006    License as published by the Free Software Foundation; either
0007    version 2 of the License, or (at your option) any later version.
0008 
0009    This library is distributed in the hope that it will be useful,
0010    but WITHOUT ANY WARRANTY; without even the implied warranty of
0011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012    Library General Public License for more details.
0013 
0014    You should have received a copy of the GNU Library General Public License
0015    along with this library; see the file COPYING.LGPL.  If not, write to
0016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0017    Boston, MA 02110-1301, USA.
0018 
0019    Alternatively, this file is available under the Mozilla Public License
0020    Version 1.1.  You may obtain a copy of the License at
0021    http://www.mozilla.org/MPL/
0022 */
0023 
0024 #ifndef TYPES_H
0025 #define TYPES_H
0026 
0027 #include "export.h"
0028 
0029 // ### this belongs into a different header
0030 #ifdef __GNUC__
0031 #define likely(x)    __builtin_expect(!!(x), 1)
0032 #define unlikely(x)  __builtin_expect(!!(x), 0)
0033 #else
0034 // !!() for maximum compatibility with the non-no-op versions
0035 #define likely(x)    !!(x)
0036 #define unlikely(x)  !!(x)
0037 #endif
0038 
0039 typedef unsigned char byte;
0040 typedef short int int16;
0041 typedef unsigned short int uint16;
0042 typedef int int32;
0043 typedef unsigned int uint; // Windows doesn't define uint by default
0044 typedef unsigned int uint32;
0045 typedef long long int int64;
0046 typedef unsigned long long int uint64;
0047 
0048 struct DFERRY_EXPORT chunk
0049 {
0050     chunk() : ptr(nullptr), length(0) {}
0051     chunk(byte *b, uint32 l) : ptr(b), length(l) {}
0052     chunk(char *b, uint32 l) : ptr(reinterpret_cast<byte *>(b)), length(l) {}
0053     chunk(const char *b, uint32 l) : ptr(reinterpret_cast<byte *>(const_cast<char *>(b))), length(l) {}
0054     byte *ptr;
0055     uint32 length;
0056 };
0057 
0058 struct DFERRY_EXPORT cstring
0059 {
0060     cstring() : ptr(nullptr), length(0) {}
0061     cstring(byte *b, uint32 l) : ptr(reinterpret_cast<char *>(b)), length(l) {}
0062     cstring(char *b, uint32 l) : ptr(b), length(l) {}
0063     cstring(const char *b, uint32 l) : ptr(const_cast<char *>(b)), length(l) {}
0064     cstring(const char *b);
0065     char *ptr;
0066     // length does not include terminating null! (this is okay because cstring does not
0067     // own the memory, so the accounting usually doesn't get screwed up)
0068     uint32 length;
0069 };
0070 
0071 
0072 #endif // TYPES_H