LINUX.ORG.RU

Таблица несвязная по большей части, с несколькими связанными элементами


0

1

Добрый вечер! В утилите обработки MSR регистров CPU данные сохраняются в таком виде:

	{ 0x10000021, MSRTYPE_RDWR, MSR2(0x000000FF, 0xFFF00000), "GLIU0_P2D_BM1", "GLIU0 P2D Base Mask Descriptor 1", {
		{ 63, 3, "PDID1", "Descriptor Destination ID", PRESENT_BIN, {
			{ MSR1(0), "Port 0 = GLIU0:GLIU GLIU1:GLIU" },
			{ MSR1(1), "Port 1 = GLIU0:GLMC GLIU1:Interface to GLIU0" },
			{ MSR1(2), "Port 2 = GLIU0:Interface to GLIU1 GLIU1:Not Used" },
			{ MSR1(3), "Port 3 = GLIU0:CPU Core GLIU1:GLCP" },
			{ MSR1(4), "Port 4 = GLIU0:DC GLIU1:GLPCI" },
			{ MSR1(5), "Port 5 = GLIU0:GP GLIU1:GIO" },
			{ MSR1(6), "Port 6 = GLIU0:VP GLIU1:Not Used" },
			{ MSR1(7), "Port 7 = GLIU0:Not Used GLIU1:Not Used" },
			{ BITVAL_EOT }
		}},
		{ 36, 1, "PCMP_BIZ", "Compare Bizarro Flag", PRESENT_BIN, {
			{ MSR1(0), "Only act if Bizarro Flag = 0 (Memory or I/O)" },
			{ MSR1(1), "Only act if Bizarro Flag = 1 (PCI, Shutdown or Halt)" },
			{ BITVAL_EOT }
		}},
		{ 59, 20, RESERVED },
		{ 39, 20, "PBASE", "Physical Memory Address Base", PRESENT_HEX, {
			{ BITVAL_EOT }
		}},
		{ 19, 20, "PMASK", "Physical Memory Address Mask", PRESENT_HEX, {
			{ BITVAL_EOT }
		}},
		{ BITS_EOT }
	}},
Все хорошо, однако в таком виде невозможно учитывать взаимосвязанные биты и регистры, которые либо недоступны в зависимости от значения других, либо меняют свой смысл. Вопрос: какую структуру данных выбрать для добавления таких связей, при том, что их будет немного, значительно меньше, чем таких, «линейных» данных. Язык программрования - Си.

★★★★★

Вот в с++ class или struct могут иметь методы, таким образом превращая «статическую» структуру данных в динамическую. Подозреваю, чтобы организовать вышеуказанные связи понадобится написать простенькие if-then, которые правда выходят за пределы понятия статической структуры данных.

Если намёк был на стек/очередь/двоичное дерево,... то мне не видно ничего подходящего из готового.

gag ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.