blob: f57b527638148e80a8ae18c0f8d363dad00eccbc [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#pragma once
#include <fbl/string.h>
#include <zircon/types.h>
#include "disk-inspector.h"
namespace disk_inspector{
template <typename T>
class PrimitiveType : public DiskObject {
public:
PrimitiveType() = delete;
PrimitiveType(const PrimitiveType&)= delete;
PrimitiveType(PrimitiveType&&) = delete;
PrimitiveType& operator=(const PrimitiveType&) = delete;
PrimitiveType& operator=(PrimitiveType&&) = delete;
PrimitiveType(fbl::String name, const T* value);
// DiskObject interface:
const char* GetName() const override {
return name_.c_str();
}
void GetValue(const void** out_buffer, size_t* out_buffer_size) const override;
uint32_t GetNumElements() const override {
return 0;
}
std::unique_ptr<DiskObject> GetElementAt(uint32_t index) const override {
return nullptr;
}
private:
// Name of the field of the on-disk structure this object represents.
fbl::String name_;
// Pointer to memory location where the value is stored.
const T* value_;
};
using DiskObjectUint64 = PrimitiveType<uint64_t>;
using DiskObjectUint32 = PrimitiveType<uint32_t>;
using DiskObjectChar = PrimitiveType<char>;
template <typename T>
class PrimitiveTypeArray : public DiskObject {
public:
PrimitiveTypeArray() = delete;
PrimitiveTypeArray(const PrimitiveTypeArray&)= delete;
PrimitiveTypeArray(PrimitiveTypeArray&&) = delete;
PrimitiveTypeArray& operator=(const PrimitiveTypeArray&) = delete;
PrimitiveTypeArray& operator=(PrimitiveTypeArray&&) = delete;
PrimitiveTypeArray(fbl::String name, const T* value, size_t size);
// DiskObject interface:
const char* GetName() const override {
return name_.c_str();
}
void GetValue(const void** out_buffer, size_t* out_buffer_size) const override {
// Invalid call for an array.
ZX_DEBUG_ASSERT_MSG(false, "Invalid GetValue call for an array.");
}
uint32_t GetNumElements() const override {
return static_cast <uint32_t>(size_);
}
std::unique_ptr<DiskObject> GetElementAt(uint32_t index) const override;
private:
// Name of the field of the on-disk structure this object represents.
fbl::String name_;
// Pointer to memory location where the value is stored.
const T* value_;
size_t size_;
};
using DiskObjectUint64Array = PrimitiveTypeArray<uint64_t>;
using DiskObjectUint32Array = PrimitiveTypeArray<uint32_t>;
using DiskObjectCharArray = PrimitiveTypeArray<char>;
} // namespace disk_inspector