// Copyright 2014 The Chromium 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 SERVICES_VIEW_MANAGER_IDS_H_
#define SERVICES_VIEW_MANAGER_IDS_H_

#include "mojo/services/view_manager/cpp/types.h"
#include "mojo/services/view_manager/cpp/util.h"

namespace view_manager {

// Connection id is used to indicate no connection. That is, no
// ViewManagerServiceImpl ever gets this id.
const mojo::ConnectionSpecificId kInvalidConnectionId = 0;

// Adds a bit of type safety to view ids.
struct ViewId {
  ViewId(mojo::ConnectionSpecificId connection_id,
         mojo::ConnectionSpecificId view_id)
      : connection_id(connection_id), view_id(view_id) {}
  ViewId() : connection_id(0), view_id(0) {}

  bool operator==(const ViewId& other) const {
    return other.connection_id == connection_id &&
        other.view_id == view_id;
  }

  bool operator!=(const ViewId& other) const {
    return !(*this == other);
  }

  mojo::ConnectionSpecificId connection_id;
  mojo::ConnectionSpecificId view_id;
};

inline ViewId ViewIdFromTransportId(mojo::Id id) {
  return ViewId(mojo::HiWord(id), mojo::LoWord(id));
}

inline mojo::Id ViewIdToTransportId(const ViewId& id) {
  return (id.connection_id << 16) | id.view_id;
}

inline ViewId RootViewId() {
  return ViewId(kInvalidConnectionId, 1);
}

// Returns a ViewId that is reserved to indicate no view. That is, no view will
// ever be created with this id.
inline ViewId InvalidViewId() {
  return ViewId(kInvalidConnectionId, 0);
}

// All cloned views use this id.
inline ViewId ClonedViewId() {
  return ViewId(kInvalidConnectionId, 2);
}

}  // namespace view_manager

#endif  // SERVICES_VIEW_MANAGER_IDS_H_
