aboutsummaryrefslogtreecommitdiff
path: root/MemoryType.cpp
diff options
context:
space:
mode:
authorMartijn Coenen <maco@google.com>2016-12-01 15:48:42 +0100
committerSteven Moreland <smoreland@google.com>2016-12-02 08:53:18 -0800
commit99e6bebc96d75d1c9b9b8130cd9b880dacb95b01 (patch)
tree4265cf9d4b006c5277416fb5fa308a3a4142cc5b /MemoryType.cpp
parent68fae1a9068bdc91b732548bb2ff95477f6c8071 (diff)
downloadhidl-99e6bebc96d75d1c9b9b8130cd9b880dacb95b01.tar.gz
memory -> hidl_memory and pointer -> hidl_pointer
Test: hidl_test Change-Id: Id71c742867be01e80cd48f689c0c619f6b647aac
Diffstat (limited to 'MemoryType.cpp')
-rw-r--r--MemoryType.cpp162
1 files changed, 162 insertions, 0 deletions
diff --git a/MemoryType.cpp b/MemoryType.cpp
new file mode 100644
index 00000000..e85fc874
--- /dev/null
+++ b/MemoryType.cpp
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "MemoryType.h"
+
+#include <hidl-util/Formatter.h>
+#include <android-base/logging.h>
+
+namespace android {
+
+MemoryType::MemoryType() {}
+
+void MemoryType::addNamedTypesToSet(std::set<const FQName> &) const {
+ // do nothing
+}
+
+std::string MemoryType::getCppType(StorageMode mode,
+ bool specifyNamespaces) const {
+ const std::string base =
+ std::string(specifyNamespaces ? "::android::hardware::" : "")
+ + "hidl_memory";
+
+ switch (mode) {
+ case StorageMode_Stack:
+ return base;
+
+ case StorageMode_Argument:
+ return "const " + base + "&";
+
+ case StorageMode_Result:
+ return "const " + base + "*";
+ }
+}
+
+std::string MemoryType::getVtsType() const {
+ return "TYPE_MEMORY";
+}
+
+void MemoryType::emitReaderWriter(
+ Formatter &out,
+ const std::string &name,
+ const std::string &parcelObj,
+ bool parcelObjIsPointer,
+ bool isReader,
+ ErrorMode mode) const {
+ const std::string parentName = "_hidl_" + name + "_parent";
+ out << "size_t " << parentName << ";\n\n";
+
+ const std::string parcelObjDeref =
+ parcelObj + (parcelObjIsPointer ? "->" : ".");
+
+ if (isReader) {
+ out << name
+ << " = (const ::android::hardware::hidl_memory *)"
+ << parcelObjDeref
+ << "readBuffer("
+ << "&"
+ << parentName
+ << ");\n";
+
+ out << "if ("
+ << name
+ << " == nullptr) {\n";
+
+ out.indent();
+
+ out << "_hidl_err = ::android::UNKNOWN_ERROR;\n";
+ handleError2(out, mode);
+
+ out.unindent();
+ out << "}\n\n";
+ } else {
+ out << "_hidl_err = "
+ << parcelObjDeref
+ << "writeBuffer(&"
+ << name
+ << ", sizeof("
+ << name
+ << "), &"
+ << parentName
+ << ");\n";
+
+ handleError(out, mode);
+ }
+
+ emitReaderWriterEmbedded(
+ out,
+ 0 /* depth */,
+ name,
+ name /* sanitizedName */,
+ isReader /* nameIsPointer */,
+ parcelObj,
+ parcelObjIsPointer,
+ isReader,
+ mode,
+ parentName,
+ "0 /* parentOffset */");
+}
+
+void MemoryType::emitReaderWriterEmbedded(
+ Formatter &out,
+ size_t /* depth */,
+ const std::string &name,
+ const std::string & /*sanitizedName*/,
+ bool nameIsPointer,
+ const std::string &parcelObj,
+ bool parcelObjIsPointer,
+ bool isReader,
+ ErrorMode mode,
+ const std::string &parentName,
+ const std::string &offsetText) const {
+ emitReaderWriterEmbeddedForTypeName(
+ out,
+ name,
+ nameIsPointer,
+ parcelObj,
+ parcelObjIsPointer,
+ isReader,
+ mode,
+ parentName,
+ offsetText,
+ "::android::hardware::hidl_memory",
+ "" /* childName */,
+ "::android::hardware");
+}
+
+bool MemoryType::needsEmbeddedReadWrite() const {
+ return true;
+}
+
+bool MemoryType::resultNeedsDeref() const {
+ return true;
+}
+
+bool MemoryType::isJavaCompatible() const {
+ return false;
+}
+
+void MemoryType::getAlignmentAndSize(size_t *align, size_t *size) const {
+ *align = *size = 8;
+}
+
+status_t MemoryType::emitVtsTypeDeclarations(Formatter &out) const {
+ out << "type: " << getVtsType() << "\n";
+ return OK;
+}
+
+} // namespace android
+