blob: 60b07754d4257c3bd0a9ea35ba52f0f381d51022 [file] [log] [blame]
// Copyright 2018 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 ZIRCON_SYSTEM_HOST_FIDL_INCLUDE_FIDL_ORDINALS_H_
#define ZIRCON_SYSTEM_HOST_FIDL_INCLUDE_FIDL_ORDINALS_H_
#include "raw_ast.h"
namespace fidl {
namespace ordinals {
// Returns the Selector. If the Selector attribute is present, the
// function returns its value; otherwise, it returns the name parameter.
std::string GetSelector(const raw::AttributeList* attributes,
SourceLocation name);
// Computes the ordinal for this method.
//
// The ordinal value is equal to
//
// *((int32_t *)sha256(library_name + "." + interface_name + "/" + method_name)) & 0x7fffffff;
//
// If |method| has an Selector attribute, that value will be used as the
// method_name.
raw::Ordinal GetGeneratedOrdinal(const std::vector<StringView>& library_name,
const StringView& interface_name,
const raw::InterfaceMethod& method);
// Retrieves the correct ordinal for this method.
//
// If |method.ordinal| is not null, this method will return |method.ordinal|.
// Otherwise, the ordinal value is computed with GetGeneratedOrdinal.
raw::Ordinal GetOrdinal(const std::vector<StringView>& library_name,
const StringView& interface_name,
const raw::InterfaceMethod& method);
// Retrieves the correct ordinal for |xunion_member|, following the same
// algorithm as GetOrdinal() for interface methods above.
raw::Ordinal GetOrdinal(const std::vector<StringView>& library_name,
const StringView& xunion_declaration_name,
const raw::XUnionMember& xunion_member);
} // namespace ordinals
} // namespace fidl
#endif // ZIRCON_SYSTEM_HOST_FIDL_INCLUDE_FIDL_ORDINALS_H_