Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/wasm2c/include/wabt/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 4 kB image not shown  

Quelle  literal.h   Sprache: C

 
/*
 * Copyright 2016 WebAssembly Community Group participants
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


#ifndef WABT_LITERAL_H_
#define WABT_LITERAL_H_

#include <cstdint>

#include "wabt/common.h"

namespace wabt {

// These functions all return Result::Ok on success and Result::Error on
// failure.
//
// NOTE: the functions are written for use with wast-lexer, assuming that the
// literal has already matched the patterns defined there. As a result, the
// only validation that is done is for overflow, not for otherwise bogus input.

enum class LiteralType {
  Int,
  Float,
  Hexfloat,
  Infinity,
  Nan,
};

enum class ParseIntType {
  UnsignedOnly = 0,
  SignedAndUnsigned = 1,
};

/* Size of char buffer required to hold hex representation of a float/double */
#define WABT_MAX_FLOAT_HEX 20
#define WABT_MAX_DOUBLE_HEX 40

Result ParseHexdigit(char c, uint32_t* out);
Result ParseInt8(const char* s,
                 const char* end,
                 uint8_t* out,
                 ParseIntType parse_type);
Result ParseInt16(const char* s,
                  const char* end,
                  uint16_t* out,
                  ParseIntType parse_type);
Result ParseInt32(const char* s,
                  const char* end,
                  uint32_t* out,
                  ParseIntType parse_type);
Result ParseInt64(const char* s,
                  const char* end,
                  uint64_t* out,
                  ParseIntType parse_type);
Result ParseUint64(const char* s, const char* end, uint64_t* out);
Result ParseUint128(const char* s, const char* end, v128* out);
Result ParseFloat(LiteralType literal_type,
                  const char* s,
                  const char* end,
                  uint32_t* out_bits);
Result ParseDouble(LiteralType literal_type,
                   const char* s,
                   const char* end,
                   uint64_t* out_bits);

// Same as above but taking a string_view
inline Result ParseInt8(std::string_view v,
                        uint8_t* out,
                        ParseIntType parse_type) {
  return ParseInt8(v.data(), v.data() + v.size(), out, parse_type);
}

inline Result ParseInt16(std::string_view v,
                         uint16_t* out,
                         ParseIntType parse_type) {
  return ParseInt16(v.data(), v.data() + v.size(), out, parse_type);
}

inline Result ParseInt32(std::string_view v,
                         uint32_t* out,
                         ParseIntType parse_type) {
  return ParseInt32(v.data(), v.data() + v.size(), out, parse_type);
}

inline Result ParseInt64(std::string_view v,
                         uint64_t* out,
                         ParseIntType parse_type) {
  return ParseInt64(v.data(), v.data() + v.size(), out, parse_type);
}

inline Result ParseUint64(std::string_view v, uint64_t* out) {
  return ParseUint64(v.data(), v.data() + v.size(), out);
}

inline Result ParseUint128(std::string_view v, v128* out) {
  return ParseUint128(v.data(), v.data() + v.size(), out);
}

inline Result ParseFloat(LiteralType literal_type,
                         std::string_view v,
                         uint32_t* out_bits) {
  return ParseFloat(literal_type, v.data(), v.data() + v.size(), out_bits);
}

inline Result ParseDouble(LiteralType literal_type,
                          std::string_view v,
                          uint64_t* out_bits) {
  return ParseDouble(literal_type, v.data(), v.data() + v.size(), out_bits);
}

void WriteFloatHex(char* buffer, size_t size, uint32_t bits);
void WriteDoubleHex(char* buffer, size_t size, uint64_t bits);
void WriteUint128(char* buffer, size_t size, v128 bits);

}  // namespace wabt

#endif /* WABT_LITERAL_H_ */

Messung V0.5
C=100 H=99 G=99

¤ Dauer der Verarbeitung: 0.22 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.