/* * Copyright (C) 2018 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. */ #define LOG_TAG "StatsDimensionsValue" #include "android/os/StatsDimensionsValue.h" #include <cutils/log.h> using android::Parcel; using android::Parcelable; using android::status_t; using std::vector; namespace android { namespace os { StatsDimensionsValue::StatsDimensionsValue() {}; StatsDimensionsValue::StatsDimensionsValue(int32_t field, String16 value) : mField(field), mValueType(kStrValueType), mStrValue(value) { } StatsDimensionsValue::StatsDimensionsValue(int32_t field, int32_t value) : mField(field), mValueType(kIntValueType), mIntValue(value) { } StatsDimensionsValue::StatsDimensionsValue(int32_t field, int64_t value) : mField(field), mValueType(kLongValueType), mLongValue(value) { } StatsDimensionsValue::StatsDimensionsValue(int32_t field, bool value) : mField(field), mValueType(kBoolValueType), mBoolValue(value) { } StatsDimensionsValue::StatsDimensionsValue(int32_t field, float value) : mField(field), mValueType(kFloatValueType), mFloatValue(value) { } StatsDimensionsValue::StatsDimensionsValue(int32_t field, vector<StatsDimensionsValue> value) : mField(field), mValueType(kTupleValueType), mTupleValue(value) { } StatsDimensionsValue::~StatsDimensionsValue() {} status_t StatsDimensionsValue::writeToParcel(Parcel* out) const { status_t err ; err = out->writeInt32(mField); if (err != NO_ERROR) { return err; } err = out->writeInt32(mValueType); if (err != NO_ERROR) { return err; } switch (mValueType) { case kStrValueType: err = out->writeString16(mStrValue); break; case kIntValueType: err = out->writeInt32(mIntValue); break; case kLongValueType: err = out->writeInt64(mLongValue); break; case kBoolValueType: err = out->writeBool(mBoolValue); break; case kFloatValueType: err = out->writeFloat(mFloatValue); break; case kTupleValueType: { int sz = mTupleValue.size(); err = out->writeInt32(sz); if (err != NO_ERROR) { return err; } for (int i = 0; i < sz; ++i) { err = mTupleValue[i].writeToParcel(out); if (err != NO_ERROR) { return err; } } } break; default: err = UNKNOWN_ERROR; break; } return err; } status_t StatsDimensionsValue::readFromParcel(const Parcel* in) { // Implement me if desired. We don't currently use this. ALOGE("Cannot do c++ StatsDimensionsValue.readFromParcel(); it is not implemented."); (void)in; // To prevent compile error of unused parameter 'in' return UNKNOWN_ERROR; } } // namespace os } // namespace android