[llvm] [SYCL][LLVM] Adding property set I/O library for SYCL (PR #110771)
Arvind Sudarsanam via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 1 17:54:34 PDT 2024
================
@@ -0,0 +1,256 @@
+//==-- PropertySetIO.h -- models a sequence of property sets and their I/O -==//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+// Models a sequence of property sets and their input and output operations.
+// TODO use Yaml as I/O engine.
+// PropertyValue set format:
+// '['<PropertyValue set name>']'
+// <property name>=<property type>'|'<property value>
+// <property name>=<property type>'|'<property value>
+// ...
+// '['<PropertyValue set name>']'
+// <property name>=<property type>'|'<property value>
+// where
+// <PropertyValue set name>, <property name> are strings
+// <property type> - string representation of the property type
+// <property value> - string representation of the property value.
+//
+// For example:
+// [Staff/Ages]
+// person1=1|20
+// person2=1|25
+// [Staff/Experience]
+// person1=1|1
+// person2=1|2
+// person3=1|12
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_PROPERTYSETIO_H
+#define LLVM_SUPPORT_PROPERTYSETIO_H
+
+#include "llvm/ADT/MapVector.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/raw_ostream.h"
+#include "llvm/Support/xxhash.h"
+
+namespace llvm {
+namespace util {
+
+// Represents a property value. PropertyValue name is stored in the encompassing
+// container.
+class PropertyValue {
+public:
+ // Type of the size of the value. Value size gets serialized along with the
+ // value data in some cases for later reading at runtime, so size_t is not
+ // suitable as its size varies.
+ using SizeTy = uint64_t;
+ using byte = uint8_t;
+
+ // Defines supported property types
+ enum Type { first = 0, NONE = first, UINT32, BYTE_ARRAY, last = BYTE_ARRAY };
+
+ // Translates C++ type to the corresponding type tag.
+ template <typename T> static Type getTypeTag();
+
+ // Casts from int value to a type tag.
+ static Expected<Type> getTypeTag(int T) {
+ if (T < first || T > last)
+ return createStringError(std::error_code(), "bad property type ", T);
+ return static_cast<Type>(T);
+ }
+
+ ~PropertyValue() {
+ if ((getType() == BYTE_ARRAY) && Val.ByteArrayVal)
+ delete[] Val.ByteArrayVal;
----------------
asudarsa wrote:
Yes. Modified it. Thanks
https://github.com/llvm/llvm-project/pull/110771
More information about the llvm-commits
mailing list