Сейчас на форуме: hgdagon, asfa (+3 невидимых)

 eXeL@B —› Программирование —› Реализация коллекции на асме
Посл.ответ Сообщение

Ранг: 8.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 июня 2007 17:54 · Поправил: LKS128
· Личное сообщение · #1

При написании проги появилась нодобность реализации коллекции(из-за активного контента) типа словарь. Вся проблема в том, что значение ключа может быть одним из 4 типов: строка, число, список и словарь(в который вложен ещё один). Как же мне это реализовать? Не так-же, ведь:

sLen equ 254
lLen equ 15
dLen equ 15

str db sLen dup(' '), 0
int dd 0
list db lLen dup(sLen dup(' '), 0)
dict db dLen dup(sLen dup(' '),0, 0, 0,0,0,0,0,0,0,0, lLen dup(sLen dup(' '), 0),... ;а как быть со вложенным словарём?

;1) [str] ... value
;2) [int] ... value
;3) [list+(sLen+1)*index] ... value of index
;4) [dict+(sLen+1)*index+(sLen+1)*(2+lLen)*index] ... key name
;5) [dict+(sLen+1)*index+(sLen+1)*(2+lLen)*index+sLen+1] ... type index
;6) [dict+(sLen+1)*index+(sLen+1)*(2+lLen)*index+sLen+1+1] ... str value
;7) [dict+(sLen+1)*index+(sLen+1)*(2+lLen)*index+(sLen+1)*2] ... int value
;8) [dict+(sLen+1)*index+(sLen+1)*(2+lLen)*index+(sLen+1)*2+8] ... list start (see #3)
;9) [dict+(sLen+1)*index+(sLen+1)*(2+lLen)*index+(sLen+1)*(2+lLen)] ... dictionary start




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 21 июня 2007 18:22
· Личное сообщение · #2

не например ничего не понятно )

LKS128 пишет:
реализации коллекции(из-за активного контента) типа словарь

подробнее опиши структуру, форматы, как храниться будет, что за контент, что это за тип "словарь")) и т.д.

LKS128 пишет:
значение ключа может быть одним из 4 типов

какого ключа?

LKS128 пишет:
список

что за список? массив т.е.?

LKS128 пишет:
словарь

я правильно понял - это должен быть указатель на словарь?

да и последнее.... я ниразу не встречал прогу, которая работала бы с большими объемами данных, обрабатывали бы их в красивом, удобном интерфейсе и всё такое.. но при этом была написана на ассемблере..... не проще построить базу данных?

-----
radio uno in ibisa ...




Ранг: 8.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 июня 2007 18:50 · Поправил: LKS128
· Личное сообщение · #3

> какого ключа?
Словарь - это своего рода таблица состоящая из ключа и значения(key/value). Я имел ввиду значение value.

> что за список? массив т.е.?
да, получается так

> подробнее опиши структуру, форматы
выходит так:

values db 15 dup(value)

vlaue struct ;'kv' - Key/Value pair
key db sLen, 0 ; типа ключ(уникалюное имя группы)
valuetype db 0; тип хранимого значения 0 - число, 1 - строка, 2 - список(массив), 3 - словарь
ival dd 0
sval db sLen dup(' '), 0
lval db lLen dup(sLen dup(' '), 0)
dval dd 0 ; ...
value ends
;;;;

в данный момент это модуль декодера строки с данными(что-то очень похожее на .торрент) во время декодеровки в values будут добавлятсч значения, а потом использоваться прогой
возможно стоит потом написать специальные процедуры извлечения значений




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 21 июня 2007 19:15
· Личное сообщение · #4

Структура, как структура. Т.е. я правильно понял, что есть файл с таблицами, записи котрых (строки) имеют такую структуру. Эти строки надо извлечь и декодировать их. А в чем проблема?

-----
radio uno in ibisa ...




Ранг: 8.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 июня 2007 19:48 · Поправил: LKS128
· Личное сообщение · #5

А ивправду... Если в "таблице"(values) как значение ключа хранить ссылку то всё вроде просто.
Меня, видно, ступорили вложенные в словарь словари.




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 22 июня 2007 02:42
· Личное сообщение · #6

LKS128

То что ты хочешь сделать называется хеш таблица, поищи в нете алго, вместо хеш кода используй адрес элемента.

-----
have a nice day




Ранг: 8.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 июня 2007 18:14
· Личное сообщение · #7

Я уже написал(~200 lines) . Всем спасибо


 eXeL@B —› Программирование —› Реализация коллекции на асме
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати