Отказ от ответственности: автор этого поста - новичок в C ++.
В моем коде Erlang у меня есть структура данных, представляющая ориентированный граф:
-record(vertex_entry, {vertex_name, outgoing_edges}).
-record(outgoing_edge, {edge_weight, neighbour_name}).
Edge1 = #outgoing_edge{edge_weight = 12.5, neighbour_name = 2},
Edge2 = #outgoing_edge{edge_weight = 11.2, neighbour_name = 3},
Edges = [Edge1,Edge2],
Vertex1 = #vertex_entry{vertex_name = 1, outgoing_edges = Edges},
Vertex4 = #vertex_entry{vertex_name = 4, outgoing_edges = Edges},
Graph = [Vertex1,Vertex4].
Я хотел бы передать этот граф в C ++ с помощью функции порта Erlang.
Со стороны C ++ я хотел бы преобразовать этот граф Erlang в граф следующей структуры (это CUDA-оптимизированная смежностьlist структура ):
typedef struct
{
// (V) This contains a pointer to the edge list for each vertex
int *vertexArray;
// Vertex count
int vertexCount;
// (E) This contains pointers to the vertices that each edge
// is attached to
int *edgeArray;
// Edge count
int edgeCount;
// (W) Weight array
float *weightArray;
} GraphData;
Возможно, код генерации графа C ++ из того же источника (глава 16 книги) будет полезен для решения проблемы:
void generateRandomGraph(GraphData *graph, int numVertices, int neighborsPerVertex)
{
graph->vertexCount = numVertices;
graph->vertexArray = (int*) malloc(graph->vertexCount * sizeof(int));
graph->edgeCount = numVertices * neighborsPerVertex;
graph->edgeArray = (int*)malloc(graph->edgeCount * sizeof(int));
graph->weightArray = (float*)malloc(graph->edgeCount * sizeof(float));
for(int i = 0; i < graph->vertexCount; i++)
{
graph->vertexArray[i] = i * neighborsPerVertex;
}
for(int i = 0; i < graph->edgeCount; i++)
{
graph->edgeArray[i] = (rand() % graph->vertexCount);
graph->weightArray[i] = (float)(rand() % 1000) / 1000.0f;
}
}
Я предполагаю, что функциональность портов Erlang поможет мне передать данные из Erlang в C ++ в двоичном формате.
Итак, вопрос: Как мне восстановить и преобразовать определенноеErlang структура данных (которая представляет собой граф) в вышеупомянутую указанную пользователем структуру данных графа C ++ в коде C ++?