namespace ov::layout

namespace layout {

// global functions

OPENVINO_API bool has_batch(const Layout& layout);
OPENVINO_API std::int64_t batch_idx(const Layout& layout);
OPENVINO_API bool has_channels(const Layout& layout);
OPENVINO_API std::int64_t channels_idx(const Layout& layout);
OPENVINO_API bool has_depth(const Layout& layout);
OPENVINO_API std::int64_t depth_idx(const Layout& layout);
OPENVINO_API bool has_height(const Layout& layout);
OPENVINO_API std::int64_t height_idx(const Layout& layout);
OPENVINO_API bool has_width(const Layout& layout);
OPENVINO_API std::int64_t width_idx(const Layout& layout);

OPENVINO_API void set_layout(
    ov::Output<ov::Node> output,
    const ov::Layout& layout
    );

OPENVINO_API ov::Layout get_layout(const ov::Output<ov::Node>& output);
OPENVINO_API ov::Layout get_layout(const ov::Output<const ov::Node>& output);

} // namespace layout