primitive.h revision 761600567d73b23324ae0251e871c15d6849ffd8
16b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom/* 26b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom * Copyright (C) 2011 The Android Open Source Project 36b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom * 46b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom * Licensed under the Apache License, Version 2.0 (the "License"); 56b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom * you may not use this file except in compliance with the License. 66b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom * You may obtain a copy of the License at 76b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom * 86b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom * http://www.apache.org/licenses/LICENSE-2.0 96b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom * 106b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom * Unless required by applicable law or agreed to in writing, software 116b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom * distributed under the License is distributed on an "AS IS" BASIS, 126b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom * See the License for the specific language governing permissions and 146b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom * limitations under the License. 156b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom */ 166b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom 176b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom#ifndef ART_SRC_PRIMITIVE_H_ 186b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom#define ART_SRC_PRIMITIVE_H_ 196b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom 206b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom#include <sys/types.h> 216b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom 22761600567d73b23324ae0251e871c15d6849ffd8Elliott Hughes#include "base/macros.h" 236b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom#include "logging.h" 246b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom 256b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstromnamespace art { 266b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom 276b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstromclass Object; 286b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom 296b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstromclass Primitive { 306b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom public: 316b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom enum Type { 326b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom kPrimNot = 0, 336b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom kPrimBoolean, 346b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom kPrimByte, 356b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom kPrimChar, 366b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom kPrimShort, 376b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom kPrimInt, 386b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom kPrimLong, 396b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom kPrimFloat, 406b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom kPrimDouble, 416b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom kPrimVoid, 426b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom }; 436b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom 446b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom static Type GetType(char type) { 456b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom switch (type) { 466b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case 'B': 476b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom return kPrimByte; 486b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case 'C': 496b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom return kPrimChar; 506b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case 'D': 516b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom return kPrimDouble; 526b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case 'F': 536b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom return kPrimFloat; 546b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case 'I': 556b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom return kPrimInt; 566b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case 'J': 576b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom return kPrimLong; 586b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case 'S': 596b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom return kPrimShort; 606b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case 'Z': 616b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom return kPrimBoolean; 626b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case 'V': 636b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom return kPrimVoid; 646b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom default: 656b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom return kPrimNot; 666b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom } 676b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom } 686b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom 696b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom static size_t ComponentSize(Type type) { 706b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom switch (type) { 71169c9a7f46776b235d0a37d5e0ff27682deffe06Ian Rogers case kPrimVoid: return 0; 726b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimBoolean: 736b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimByte: return 1; 746b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimChar: 756b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimShort: return 2; 766b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimInt: 776b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimFloat: return 4; 786b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimLong: 796b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimDouble: return 8; 806b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimNot: return sizeof(Object*); 816b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom default: 826b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom LOG(FATAL) << "Invalid type " << static_cast<int>(type); 836b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom return 0; 846b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom } 856b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom } 866b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom 876b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom static size_t FieldSize(Type type) { 886b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom return ComponentSize(type) <= 4 ? 4 : 8; 896b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom } 906b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom 9191250e0c3fb0ad758b9b97042a3fa86d5ae76763Elliott Hughes static const char* Descriptor(Type type) { 926b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom switch (type) { 936b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimBoolean: 9491250e0c3fb0ad758b9b97042a3fa86d5ae76763Elliott Hughes return "Z"; 956b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimByte: 9691250e0c3fb0ad758b9b97042a3fa86d5ae76763Elliott Hughes return "B"; 976b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimChar: 9891250e0c3fb0ad758b9b97042a3fa86d5ae76763Elliott Hughes return "C"; 996b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimShort: 10091250e0c3fb0ad758b9b97042a3fa86d5ae76763Elliott Hughes return "S"; 1016b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimInt: 10291250e0c3fb0ad758b9b97042a3fa86d5ae76763Elliott Hughes return "I"; 1036b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimFloat: 10491250e0c3fb0ad758b9b97042a3fa86d5ae76763Elliott Hughes return "F"; 1056b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimLong: 10691250e0c3fb0ad758b9b97042a3fa86d5ae76763Elliott Hughes return "J"; 1076b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom case kPrimDouble: 10891250e0c3fb0ad758b9b97042a3fa86d5ae76763Elliott Hughes return "D"; 1096d4d9fcb4f01e287ee29e81cd1c941ee5d11d379Ian Rogers case kPrimVoid: 11091250e0c3fb0ad758b9b97042a3fa86d5ae76763Elliott Hughes return "V"; 1116b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom default: 1126b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom LOG(FATAL) << "Primitive char conversion on invalid type " << static_cast<int>(type); 11391250e0c3fb0ad758b9b97042a3fa86d5ae76763Elliott Hughes return NULL; 1146b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom } 1156b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom } 1166b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom 1176b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom private: 1186b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom DISALLOW_IMPLICIT_CONSTRUCTORS(Primitive); 1196b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom}; 1206b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom 121ae826983f7903bc0a6bbbe8426bf393fb2f6d747Brian Carlstromstd::ostream& operator<<(std::ostream& os, const Primitive::Type& state); 122ae826983f7903bc0a6bbbe8426bf393fb2f6d747Brian Carlstrom 1236b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom} // namespace art 1246b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom 1256b4ef025af12b158d117fc80fc79acf620f411a0Brian Carlstrom#endif // ART_SRC_PRIMITIVE_H_ 126