| /**************************************************************************** |
| ** |
| ** Copyright (C) 2017 Intel Corporation |
| ** |
| ** Permission is hereby granted, free of charge, to any person obtaining a copy |
| ** of this software and associated documentation files (the "Software"), to deal |
| ** in the Software without restriction, including without limitation the rights |
| ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| ** copies of the Software, and to permit persons to whom the Software is |
| ** furnished to do so, subject to the following conditions: |
| ** |
| ** The above copyright notice and this permission notice shall be included in |
| ** all copies or substantial portions of the Software. |
| ** |
| ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| ** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| ** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| ** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| ** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| ** THE SOFTWARE. |
| ** |
| ****************************************************************************/ |
| |
| #ifndef CBORINTERNAL_P_H |
| #define CBORINTERNAL_P_H |
| |
| #include "compilersupport_p.h" |
| |
| #ifndef CBOR_INTERNAL_API |
| # define CBOR_INTERNAL_API |
| #endif |
| |
| #ifndef CBOR_PARSER_MAX_RECURSIONS |
| # define CBOR_PARSER_MAX_RECURSIONS 1024 |
| #endif |
| |
| /* |
| * CBOR Major types |
| * Encoded in the high 3 bits of the descriptor byte |
| * See http://tools.ietf.org/html/rfc7049#section-2.1 |
| */ |
| typedef enum CborMajorTypes { |
| UnsignedIntegerType = 0U, |
| NegativeIntegerType = 1U, |
| ByteStringType = 2U, |
| TextStringType = 3U, |
| ArrayType = 4U, |
| MapType = 5U, /* a.k.a. object */ |
| TagType = 6U, |
| SimpleTypesType = 7U |
| } CborMajorTypes; |
| |
| /* |
| * CBOR simple and floating point types |
| * Encoded in the low 8 bits of the descriptor byte when the |
| * Major Type is 7. |
| */ |
| typedef enum CborSimpleTypes { |
| FalseValue = 20, |
| TrueValue = 21, |
| NullValue = 22, |
| UndefinedValue = 23, |
| SimpleTypeInNextByte = 24, /* not really a simple type */ |
| HalfPrecisionFloat = 25, /* ditto */ |
| SinglePrecisionFloat = 26, /* ditto */ |
| DoublePrecisionFloat = 27, /* ditto */ |
| Break = 31 |
| } CborSimpleTypes; |
| |
| enum { |
| SmallValueBitLength = 5U, |
| SmallValueMask = (1U << SmallValueBitLength) - 1, /* 31 */ |
| Value8Bit = 24U, |
| Value16Bit = 25U, |
| Value32Bit = 26U, |
| Value64Bit = 27U, |
| IndefiniteLength = 31U, |
| |
| MajorTypeShift = SmallValueBitLength, |
| MajorTypeMask = (int) (~0U << MajorTypeShift), |
| |
| BreakByte = (unsigned)Break | (SimpleTypesType << MajorTypeShift) |
| }; |
| |
| CBOR_INTERNAL_API CBOR_INTERNAL_API_CC CborError _cbor_value_extract_number(const CborParser *p, int *offset, uint64_t *len); |
| CBOR_INTERNAL_API CBOR_INTERNAL_API_CC CborError _cbor_value_prepare_string_iteration(CborValue *it); |
| |
| #endif /* CBORINTERNAL_P_H */ |