Conversation
Strategy document for updating D3130 Container Interface paper to match graph-v3 implementation. All 8 open questions resolved: - Q1: Hybrid exposition-only convention for descriptors - Q2: Pass descriptors by value (full audit of 17 occurrences) - Q3: Drop trait gate on edge<G,E>, no edge_list descriptors/views - Q4: Keep adjacency matrix traits/concepts - Q5: raw_vertex_id_t exposition-only, vertex_id_store_t normative - Q6: Separate namespaces (std::graph::edge_list) - Q7: vertex_property_map in GCI (D3130) - Q8: source_id mandatory for descriptor-based edges
- Delete concepts_edges_before.hpp and concepts_basic_adj_list.hpp - Rewrite concepts_edges.hpp: single edge<G,E> concept (no trait gate, Q3) - Rewrite concepts_target_edge_range.hpp: out_edge_range + in_edge_range - Rewrite concepts_vertex_range.hpp: vertex<G,V>, vertex_range, index_vertex_range, mapped_vertex_range - Rewrite concepts_adj_list.hpp: adjacency_list, bidirectional, index, mapped variants - Rewrite descriptor.hpp: vertex_descriptor + edge_descriptor (exposition-only internals, Q1) - Rewrite descriptor_view.hpp: vertex_descriptor_view + edge_descriptor_view - Rewrite edgelist_concepts.hpp: 2-arg concepts in std::graph::edge_list namespace - Rewrite edgelist_types.hpp: 2-arg type aliases, add raw_vertex_id_t, remove edge_reference_t - Add descriptor_traits.hpp: is_vertex_descriptor, is_edge_descriptor, is_descriptor - Update container_interface.tex: add lstinputlisting for descriptor.hpp and descriptor_traits.hpp - Add gci_update_plan.md implementation plan
- Traits table: update has_contains_edge to <G,V>, remove unordered/ordered edge traits, add bidirectional query traits (has_in_degree, has_find_in_edge, has_contains_in_edge), add compound traits (has_basic_queries, has_full_queries), note adjacency_matrix not yet in reference implementation - Type alias table: already updated in Phase A amend (remove graph/vertex/edge _reference_t, add vertex_id_store_t, raw-vertex-id-type, out_edge_*/in_edge_* types, backward-compat aliases)
- Graph table: rename has_edge(g)->has_edges(g), update default impl to use out_edges
- Vertex table: rename edges->out_edges, degree->out_degree; add in_edges, in_degree;
note backward-compat aliases (edges, degree); update vertex_edge_range_t->out_edge_range_t
- Edge table: rename find_vertex_edge->find_out_edge, contains_edge->contains_out_edge;
make source_id mandatory for descriptor-based edges (not optional); remove optional
source_id separator; add find_in_edge, contains_in_edge rows; note backward-compat aliases
- Edgelist table: 1-arg->2-arg CPOs (target_id(e)->target_id(el,uv), etc.);
update contains_edge lambda to use 2-arg forms; rename has_edge->has_edges
- Update prose references: edges(g,u)->out_edges(g,u), source_id(e)->source_id(el,uv), etc.
- Fix LaTeX errors from Phase B: \textit inside \tcode, vertex_t<G>{} braces
- Concepts intro: remove 'sourced' qualifier, add 'mapped' and 'bidirectional' - Edge Concepts: single edge<G,E> concept; explain removal of targeted/sourced split; simplify return-type rationale; keep precedent note about sized_range - Edge Range Concepts: explain out_edge_range + in_edge_range semantics - Vertex Concepts: describe vertex<G,V>, index_vertex_range, mapped_vertex_range - Adjacency List Concepts: list all 6 concepts and their axes; explain removal of basic_*/sourced_* variants due to descriptor design - Edgelist Concepts: explain 2-arg form and three concept levels
…cture - Add 'Why Descriptors?' motivation with comparison table (raw iterators vs descriptors) - Add implicit vertex support explanation (index-based descriptors work without materialised vertex storage) - Add automatic pattern recognition paragraph (random-access, associative, edge patterns) - Replace old monolithic descriptor prose with split architecture description: vertex_descriptor<VertexIter> and edge_descriptor<EdgeIter,VertexIter,EdgeDirection> - Fix inner_value() -> underlying_value(c) / inner_value(c) (container parameter required) - Add pass-by-value convention paragraph (descriptors trivially copyable, const& only in requires clauses) - Remove stale itemize list of descriptor properties (now covered in prose) - Keep all three lstinputlisting calls: descriptor.hpp, descriptor_traits.hpp, descriptor_view.hpp
…patterns
- Remove \phil note from Namespace subsection
- Fix intro prose CPO args: source_id(el,e) -> source_id(el,uv) etc.
- Types table: remove edge_reference_t<EL>; add raw-vertex-id-type (exposition-only);
update vertex_id_t definition to use source_id(el,uv) (consistent with edgelist_types.hpp)
- Pattern section: rename edge_info -> edge_data throughout (4 occurrences)
- Pattern section: add pair<integral,integral> pattern
- Pattern section: add edge_data reference variants:
edge_data<VId,true,E&,void> and edge_data<VId,true,E&,EV>
- Add vertex_data/edge_data/neighbor_data struct families with specialization tables
- Add copyable_vertex_t/copyable_edge_t/copyable_neighbor_t helper alias table
- Add Value Function Concepts subsection: vertex_value_function, edge_value_function
- Add Vertex Property Map subsection: vertex_property_map<G,T> type alias,
make_vertex_property_map (eager+lazy), vertex_property_map_contains,
vertex_property_map_get
- Fix: use L{8cm} column spec in copyable_types table (arydshln requires at least one L column)
- Fix: remove texcl-interpreted comment from vertex_property_map lstlisting
…paces - GCI intro: introduce both namespaces by name; explain that adj_list is re-exported to graph:: but edge_list is not (vertex_id_t conflict) - Adjacency List Interface: add Namespace subsection explaining graph::adj_list, re-export to graph::, and when to use the qualified form - Edgelist Interface: expand Namespace subsection to explain the peer relationship, contrast the two ADTs, and note the shared CPOs (source_id, target_id, edge_value)
- Traits table: fix has_degree comment degree->out_degree, has_find_vertex_edge comment find_vertex_edge->find_out_edge, has_contains_edge comment contains_edge->contains_out_edge (adj_list CPO names) - Partition section: edges(g,uid,pid)/edges(g,u,pid) -> out_edges(g,uid,pid)/ out_edges(g,u,pid) - Revision history: add r4 entry summarising all descriptor, concept, CPO, type alias, data struct, namespace and edgelist changes from Phases A-H
- tex/conventions.tex: vertex_reference_t<G> -> vertex_t<G> (descriptor row); edge_reference_t<G> -> edge_t<G> (edge descriptor row); vertex_info -> vertex_data (VProj description); edge_info -> edge_data (EProj description) - tex/specification.tex: vertex_reference_t<G> -> vertex_t<G> in vertex_value(), has_degree, has_find_vertex_edge, adjacency_list, incidence(), neighbors() (6 occurrences) - D3128_Algorithms/tex/algorithms.tex: edge_reference_t<G> -> edge_t<G> in basic_edge_weight_function and edge_weight_function concepts (2 occurrences) - D3128_Algorithms and D3130_Container_Interface both build cleanly
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Update to current graph-v3 state