Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Extended strings class library
DF2 :: ФОРУМЫ > Основные форумы > Софт и железо > Программирование / Coding
Guevara-chan
Эту библиотеку мне когда-то навязчиво порекомендовал написать сам 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. Библиотека пока находится на ранней стадии развития, и будет в дальнейшем, по мере возможности, дорабатываться.
gamecreator
эээ... и для чего она предназначена?
Guevara-chan
Цитата(gamecreator @ 24 Nov 2007, 21:29)
эээ... и для чего она предназначена?

Это классовая обертка для хранения строк и манипуляций над оными.
gamecreator
типа CString?
Guevara-chan
Цитата(gamecreator @ 25 Nov 2007, 21:44)
типа CString?

Наверное.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.