11aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber/* 21aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Copyright (C) 2016 The Android Open Source Project 31aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 41aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 51aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * you may not use this file except in compliance with the License. 61aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * You may obtain a copy of the License at 71aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 81aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 91aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 101aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Unless required by applicable law or agreed to in writing, software 111aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 121aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * See the License for the specific language governing permissions and 141aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * limitations under the License. 151aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber */ 161aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber 17c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#ifndef SCALAR_TYPE_H_ 18c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 19c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#define SCALAR_TYPE_H_ 20c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 21c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include "Type.h" 22c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 23c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android { 24c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 25c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct ScalarType : public Type { 26c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber enum Kind { 27c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber KIND_BOOL, 28c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber KIND_INT8, 29c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber KIND_UINT8, 30c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber KIND_INT16, 31c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber KIND_UINT16, 32c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber KIND_INT32, 33c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber KIND_UINT32, 34c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber KIND_INT64, 35c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber KIND_UINT64, 36c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber KIND_FLOAT, 37c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber KIND_DOUBLE, 38c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber }; 39c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 4063f399021d053453704d41845d4ebcc06fe01738Timur Iskhakov ScalarType(Kind kind, Scope* parent); 41c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 42abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong bool isScalar() const override; 43abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong 449df5244c1dd4508cc2e25f8a04d363903912d19cSteven Moreland bool isElidableType() const override; 45737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber const ScalarType *resolveToScalarType() const override; 46737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 475dc72fe4f6f1d2c03c75307a9bd80f055f752ed3Timur Iskhakov bool deepCanCheckEquality(std::unordered_set<const Type*>* visited) const override; 48c6752dcea3b5dae1e99960b5beb6af394280b393Yifan Hong 4930bb6a869be0f3f82497b7b11c71ec9d47652ed0Steven Moreland std::string typeName() const override; 508d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber bool isValidEnumStorageType() const; 518d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 524c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber std::string getCppType( 534c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber StorageMode mode, 544c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber bool specifyNamespaces) const override; 554c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber 564ed1347cd29e6e07acad368891bb03078c798abaYifan Hong std::string getJavaType(bool forInitializer) const override; 57881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 5885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber std::string getJavaWrapperType() const override; 592831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber std::string getJavaSuffix() const override; 602831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 61c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang std::string getVtsType() const override; 62c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang std::string getVtsScalarType() const; 63c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang 64881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void emitReaderWriter( 65881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 66881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 67881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 68881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 69881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 70881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode) const override; 71881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 72737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber void emitReaderWriterWithCast( 73737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber Formatter &out, 74737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber const std::string &name, 75737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber const std::string &parcelObj, 76737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber bool parcelObjIsPointer, 77737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber bool isReader, 78737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber ErrorMode mode, 79737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber bool needsCast) const; 80737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 81f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong void emitHexDump( 82f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong Formatter &out, 83f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &streamName, 84f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &name) const; 85f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong 86e45b5303e072043679483a70606f6c00dde17382Yifan Hong void emitConvertToJavaHexString( 87e45b5303e072043679483a70606f6c00dde17382Yifan Hong Formatter &out, 88e45b5303e072043679483a70606f6c00dde17382Yifan Hong const std::string &name) const; 89e45b5303e072043679483a70606f6c00dde17382Yifan Hong 9085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber void emitJavaFieldReaderWriter( 9185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &out, 924c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber size_t depth, 93709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber const std::string &parcelName, 9485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &blobName, 9585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &fieldName, 9685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &offset, 9785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber bool isReader) const override; 9885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 99368e46077eb9fbe52242e037a5b9de91693fe70fSteven Moreland void emitVtsTypeDeclarations(Formatter& out) const override; 1005158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 10185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber void getAlignmentAndSize(size_t *align, size_t *size) const override; 10285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 1035788697381666844eeb23e04e5c6f83ec6ec8b44Yifan Hong Kind getKind() const; 1045788697381666844eeb23e04e5c6f83ec6ec8b44Yifan Hong 105c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberprivate: 106c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber Kind mKind; 107c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 108c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber DISALLOW_COPY_AND_ASSIGN(ScalarType); 109c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}; 110c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 111c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 112c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 113c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif // SCALAR_TYPE_H_ 114