blob: 271a37b17ddb303a7a33e0ce6be319936ebc91cd [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.
#ifndef SRC_LIB_FIDL_CODEC_VISITOR_H_
#define SRC_LIB_FIDL_CODEC_VISITOR_H_
#include "src/lib/fidl_codec/wire_object.h"
namespace fidl_codec {
// Superclass for implementing visitors for Values. Note that the whole class is protected. To use a
// visitor, use the Visit method on the Value object you want to visit.
class Visitor {
protected:
virtual void VisitValue(const Value* node) {}
virtual void VisitNullableValue(const NullableValue* node) { VisitValue(node); }
virtual void VisitInlineValue(const InlineValue* node) { VisitValue(node); }
virtual void VisitRawValue(const RawValue* node) { VisitValue(node); }
virtual void VisitObject(const Object* node) { VisitNullableValue(node); }
virtual void VisitStringValue(const StringValue* node) { VisitNullableValue(node); }
virtual void VisitBoolValue(const BoolValue* node) { VisitInlineValue(node); }
virtual void VisitEnvelopeValue(const EnvelopeValue* node) { VisitNullableValue(node); }
virtual void VisitTableValue(const TableValue* node) { VisitNullableValue(node); }
virtual void VisitUnionValue(const UnionValue* node) { VisitNullableValue(node); }
virtual void VisitXUnionValue(const XUnionValue* node) { VisitUnionValue(node); }
virtual void VisitArrayValue(const ArrayValue* node) { VisitValue(node); }
virtual void VisitVectorValue(const VectorValue* node) { VisitNullableValue(node); }
virtual void VisitEnumValue(const EnumValue* node) { VisitInlineValue(node); }
virtual void VisitBitsValue(const BitsValue* node) { VisitInlineValue(node); }
virtual void VisitHandleValue(const HandleValue* node) { VisitValue(node); }
virtual void VisitNumericValue(const InlineValue* node) { VisitInlineValue(node); }
virtual void VisitU8Value(const NumericValue<uint8_t>* node) { VisitNumericValue(node); }
virtual void VisitU16Value(const NumericValue<uint16_t>* node) { VisitNumericValue(node); }
virtual void VisitU32Value(const NumericValue<uint32_t>* node) { VisitNumericValue(node); }
virtual void VisitU64Value(const NumericValue<uint64_t>* node) { VisitNumericValue(node); }
virtual void VisitI8Value(const NumericValue<int8_t>* node) { VisitNumericValue(node); }
virtual void VisitI16Value(const NumericValue<int16_t>* node) { VisitNumericValue(node); }
virtual void VisitI32Value(const NumericValue<int32_t>* node) { VisitNumericValue(node); }
virtual void VisitI64Value(const NumericValue<int64_t>* node) { VisitNumericValue(node); }
virtual void VisitF32Value(const NumericValue<float>* node) { VisitNumericValue(node); }
virtual void VisitF64Value(const NumericValue<double>* node) { VisitNumericValue(node); }
friend class Value;
friend class NullableValue;
friend class InlineValue;
friend class RawValue;
template <typename T>
friend class NumericValue;
friend class StringValue;
friend class BoolValue;
friend class Object;
friend class EnvelopeValue;
friend class TableValue;
friend class UnionValue;
friend class XUnionValue;
friend class ArrayValue;
friend class VectorValue;
friend class EnumValue;
friend class BitsValue;
friend class HandleValue;
};
} // namespace fidl_codec
#endif // SRC_LIB_FIDL_CODEC_VISITOR_H_