I could get really deep responses with this thread.
I didn't notice that this is graph, until LanX said that, and your item and data are "adjacency list" with reference + count information. "item" is vertex which has reference to edge information,and "data" is edge data storage.
Your usage of reference: reference from "item" to "data" seems to me an essence I would like to use by myself...
I would like to have some more time to stick around this code, and thanks for your kind explanation.