180 |
template<typename T> |
template<typename T> |
181 |
struct Resolver { |
struct Resolver { |
182 |
static UID resolve(const T& obj) { |
static UID resolve(const T& obj) { |
183 |
return UID { (ID) &obj, sizeof(obj) }; |
const UID uid = { (ID) &obj, sizeof(obj) }; |
184 |
|
return uid; |
185 |
} |
} |
186 |
}; |
}; |
187 |
|
|
189 |
template<typename T> |
template<typename T> |
190 |
struct Resolver<T*> { |
struct Resolver<T*> { |
191 |
static UID resolve(const T* const & obj) { |
static UID resolve(const T* const & obj) { |
192 |
return UID { (ID) obj, sizeof(*obj) }; |
const UID uid = { (ID) obj, sizeof(*obj) }; |
193 |
|
return uid; |
194 |
} |
} |
195 |
}; |
}; |
196 |
}; |
}; |
642 |
class UIDChainResolver<T*> { |
class UIDChainResolver<T*> { |
643 |
public: |
public: |
644 |
UIDChainResolver(const T*& data) { |
UIDChainResolver(const T*& data) { |
645 |
m_uid.push_back(UID { &data, sizeof(data) }); |
const UID uids[2] = { |
646 |
m_uid.push_back(UID { data, sizeof(*data) }); |
{ &data, sizeof(data) }, |
647 |
|
{ data, sizeof(*data) } |
648 |
|
}; |
649 |
|
m_uid.push_back(uids[0]); |
650 |
|
m_uid.push_back(uids[1]); |
651 |
} |
} |
652 |
|
|
653 |
operator UIDChain() const { return m_uid; } |
operator UIDChain() const { return m_uid; } |