Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 24.11.2007, 21:04   #1
Chrono Syndrome
 
Сообщений: n/a
Extended strings class library (Win32FORTH)

Эту библиотеку мне когда-то навязчиво порекомендовал написать сам 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. Библиотека пока находится на ранней стадии развития, и будет в дальнейшем, по мере возможности, дорабатываться.
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Error: library/unit does not contain function... kalexi Основной форум 0 29.07.2009 22:14
Проблема c XML library l_amer PureBasic 0 25.11.2008 21:25
A.R.S.E.N.A.L. Extended Power FLIP Игры / Games 0 23.10.2007 20:20
fs.class и fw.class - вирусы или нет? MotoMustanger FAQ 2 10.07.2007 18:54
SFL (Standard Function Library) pax C++ 2 09.11.2006 01:31


Часовой пояс GMT +4, время: 22:18.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com