не последние (продолжение следует) новости из мира id3project:
сегодня я доделывал обратное преобразование структур тегов в байт-последовательность. и всё бы хорошо,, ведь делается это просто: создаётся класс с одной полиморфной функцией(которая и делает преобразование) и для каждой структуры определяется как работает эта функция, а работает она рекурсивно - структуры-то составные,, вот и получается, что преобразование сложной структуры - это просто склейка преобразований её частей (и для частей выполняется тоже самое).
и вот из тех примитивов, для которых надо определять преобразование напрямую,, мне остались только числа (Integer) со значением размера. а тут особую сложность представляет такая неприятная штука как синхронизация "/ по англицки synchsafe integer - это что-то вроде синхробезопасное число о_О
я уже достаточно намучался с десинхронизацией в самом начале - поскольку размер тега и размеры фреймов в соответствии со стандартом id3v2.4 синхронизированы. до сих пор не понимаю зачем это вообще нудно делать /= но фиг с ним,, когда я разбирался с десинхронизацией, я не очень-то понял как она происходит,, грубо говоря, я просто взял какую-то готовую функцию на с++ и переписал на haskell'е. но теперь, когда мне нужно было сделать функцию обратную к этой - такой готовой в интернетах не нашлось. в общем мне пришлось разобраться с десинхронизацией и придумать обратную функцию для синхронизации. и я очень доволен что у меня это получилось (:
теперь вроде бы все структуры обратно-конвертируемы. и надо это проверять. то есть надо проверить на заданном множестве это преобразование - обратная к парсеру.
собственно будет повод разобраться с Quickcheck (или HUnit).
следующий шаг: тестирование, оформление и документирование того, что уже готово.
Комментариев нет:
Отправить комментарий