2026-01-26 14:51:28 +09:00

61 lines
1.9 KiB
C#

/*
* Copyright (c) 2025 LG Electronics Inc.
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
*/
using Aurora.Api.Devices;
using System.Collections.Generic;
namespace VisionCommon {
/// <summary>
/// 모션의 포지션 매니저
/// </summary>
/// <typeparam name="T"></typeparam>
public class PositionManager<T> {
private object _lock = new object();
private Dictionary<T, IPositionAdapter> _adapters = new Dictionary<T, IPositionAdapter>();
/// <summary>
/// 포지션 어댑터를 등록한다.
/// </summary>
/// <param name="info">키 정보</param>
/// <param name="positionAdapter">포지션 어댑터</param>
public void SetAdapter(T info, IPositionAdapter positionAdapter) {
lock (_lock) {
if (!_adapters.ContainsKey(info)) {
_adapters.Add(info, positionAdapter);
}
}
}
/// <summary>
/// 포지션 어댑터를 얻어온다.
/// </summary>
/// <param name="info">키 정보</param>
/// <returns>포지션 어댑터</returns>
public IPositionAdapter GetAdapter(T info) {
lock (_lock) {
if (_adapters.ContainsKey(info)) {
return _adapters[info];
}
}
return null;
}
/// <summary>
/// 포지션을 얻어온다.
/// </summary>
/// <param name="info">키 정보</param>
/// <param name="positionType">포지션 타입</param>
/// <returns>포지션</returns>
public Position GetPosition(T info, ePositionType positionType) {
lock (_lock) {
var posAdapter = GetAdapter(info);
if (posAdapter == null) {
return null;
}
return posAdapter.GetPosition(positionType);
}
}
}
}