Здравствуйте, гость ( Вход | Регистрация )
24 Nov 2007, 20:13
Сообщение
#1
|
|
![]() •●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5936 раз |
Эту библиотеку мне когда-то навязчиво порекомендовал написать сам lead programmer Win32FORTH'а. Проблема лишь в том, что вскоре за этим он меня забанил, так что, собственно, показать свое творение ему я, увы, не имею теперь никакой возможности. Посему я решила опубликовать его здесь, авось кому и пригодится. Итак....
Код \ -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- \ Extended string class library v0.1 \ Developed in 2007 by Chrono Syndrome \ -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- :Class ExString <Super ClassRoot Int MemHandle \ Указатель на строку. Int StringSize \ Размер строки. Int Z \ Временное хранилище :) // ---- :M SetSize: ( NewSize -- flag ) \ Уcтановка размера строки. DUP \ Сохранение нового значения размера строки. 1+ \ Резервация места для заверщающего NULL. MemHandle Realloc IF 2DROP \ Если не удалось изменить размер блока памяти... False \ Возвращаемый результат. ELSE TO MemHandle \ Установка нового указателя. TO StringSize \ Установка нового рамера строки. True \ Возвращаемый результат. THEN;M // ---- :M ClassInit: ( -- ) \ Первичная инициализация класса. 0 Malloc TO MemHandle;M // ---- :M ~: ( -- ) \ Уничтожение экземпляра класса. MemHandle release;M // ---- :M Set: ( addr len -- ) \ Установка значения строки. DUP \ Сохранение значения размера строки SetSize: Self \ Уcтановка нового строки. IF \ Если удалось... MemHandle SWAP MOVE \ Копирование символов. ELSE 2DROP \ Удаление ненужных значений со стека. THEN ;M // ---- :M Append: ( addr len -- ) \ Добавление символов к строке. MemHandle StringSize + TO Z \ Сохранение адреса для последующего копирования данных. DUP \ Сохранение значения размера строки StringSize + \ Прибавление изначального размера строки. SetSize: Self \ Уcтановка нового строки. IF \ Если удалось... Z SWAP MOVE \ Копирование символов. ELSE 2DROP \ Удаление ненужных значений со стека. THEN ;M // ---- :M Addr: ( -- addr ) \ Получение указателя на строку. MemHandle;M // ---- :M GetSize: ( -- Size ) \ Получение размера строки. StringSize;M // ---- :M Get: ( -- addr len ) \ Получение значения строки (S-формат). MemHandle StringSize;M // ---- :M 2UCase: ( -- ) \ Преобразование строки в верхний регистр. MemHandle StringSize UPPER;M // ---- :M 2LCase: ( -- ) \ Преобразование строки в нижний регистр. MemHandle StringSize LOWER;M // ---- :M CInt: ( -- num Flag ) \ Преобразует строку в целое число. MemHandle StringSize (Number?) NIP;M // ---- :M CDouble: ( -- dnum Flag ) \ Преобразует строку в число двойной точности. MemHandle StringSize (Number?);M // ---- :M CFloat: ( -- fnum Flag ) \ Преобразует строку в число с плавающей точкой. MemHandle StringSize >FLOAT -IF ELSE \ Даже если не удалось преобразовать строку... 0E \ Все равно добавляем значение на Float-стек. THEN;M // ---- :M ParseInt: ( num -- ) \ Преобразует целое число в строку. S>D TUCK DABS <# #S ROT SIGN #> Set: Self;M // ---- :M ParseDouble: ( dnum -- ) \ Преобразует число двойной точности в строку. TUCK DABS <# #S ROT SIGN #> Set: Self;M // ---- :M ParseFloat: ( fnum -- ) \ Преобразует число с плавающей точкой в строку. MAXSTRING Malloc TO Z \ Создание временного буффера. Z (F.) \ Форматирование числа в буффер и установка строки. Z Count Set: Self \ Копирование полученной строки. Z Release \ Уничтожение буффера. ;M // ---- :M GetChar: ( pos -- ascii ) \ Устанавливает значение указанного символа. MemHandle + 1- C@;M // ---- :M PutChar: ( ascii pos -- ) \ Получает значение указанного символа. MemHandle + 1- C!;M // ---- :M AddChar: ( ascii -- ) \ Добавляет символ в конец строки. StringSize 1+ \ Увеличиваем предпологаемый размер строки. SetSize: Self DROP \ Выставляем новый рамер строки. MemHandle StringSize + 1- C! \ Записываем символ. ;M ;Class P.S. Библиотека пока находится на ранней стадии развития, и будет в дальнейшем, по мере возможности, дорабатываться. -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
|
Chrono Syndrome Extended strings class library 24 Nov 2007, 20:13
gamecreator эээ... и для чего она предназначена? 24 Nov 2007, 20:29
Chrono Syndrome Цитата(gamecreator @ 24 Nov 2007, 21:29)эээ..... 24 Nov 2007, 20:41
gamecreator типа CString? 25 Nov 2007, 20:44
Chrono Syndrome Цитата(gamecreator @ 25 Nov 2007, 21:44)типа ... 25 Nov 2007, 20:45![]() ![]() |
| Текстовая версия | Сейчас: 14 December 2025 - 02:42 |
|
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |
|