Сейчас 16:34:32 Среда, 24 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Struct/Class] String (Подобие string в C#)
[Struct/Class] String
Ty3uKДата: Четверг, 11 Октября 2012, 23:12:53 | Сообщение # 1
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Решил сделать подобие класса string, который есть в C# (точнее он много где есть, я взял за основу шарповый).
Буду рад критике - алгоритмы не идеальны, код тоже. Можно скачать и посмотреть пример, я приложу его внизу.
Code
/**************************************
*
*   String Class
*       v1.0
*   By Max Karelov aka Ty3uK
*
*   -Struct such as "string" class in C#
*
*   Requirements:
*   -------------
*
*        Jass New Gen Pack 5d with latest AdicHelper and JassHelper
*            Here is download link:
*                http://www.mediafire.com/?aqfwy8wmrcuf67k
*
*   API:
*   ----
*
*        Methods:
*            Clone() - returns copy of current copy of String.
*            Equals(String toCompare) - compare current copy of String with argumented copy of String. Returns boolean.
*            GetHashCode() - returns hash of current copy of String.
*            IndexOf(string value) - returns first index of argumented value.
*            IndexOf(string value, int start) - returns first index of argumented value since start position.
*            Insert(int start, string value) - returns string with inserted value on a start position.
*            LastIndexOf(string value) - returns last index of argumented value.
*            LastIndexOf(string value, int start) - returns last index of argumented value since start position.
*            Remove(int start) - removes all symbols after start position. Returns string.
*            Remove(int start, int count) - removes defined count of symbols after start position. Returns string.
*            Replace(string old, string new) - replacing all old values with new values. Returns string.
*            Substring(int start) - returns substring of current copy of String after start position.
*            Substring(int start, int length) - returns substring of current copy of String after start position with defined length.
*            Trim() - removes all spaces chars before and after text of current copy of String. Returns string.
*            create(string value) - create new copy of String with defined start value;
*            destroy() - destroy current copy of String.
*
*        Operators:
*            [index] - returns indexed char of current copy of String.
*            [index]= - sets defined char of current copy of String.
*            Text - returns text of current copy of String.
*            Text = - sets new value of current copy of String.
*
*   Cheers:
*   ----
*        SirNikolas
*
**************************************/
library_once StringClass {
     #include "cj_types_priv.j";
      
     struct String {
         private string VALUE;
         readonly int Length;

         #define {
             IndexOf(value) = indexOf(value, 0);
             IndexOf(value, start) = indexOf(value, start);
              
             LastIndexOf(value) = lastIndexOf(value);
             LastIndexOf(value, start) = lastIndexOf_Overload(value, start);
              
             Remove(start) = remove(start);
             Remove(start, count) = remove_Overload(start, count);
              
             Substring(start) = substring(start);
             Substring(start, Length) = substring_Overload(start, Length);
         }

         public string operator [] (int index) {
            return SubString(VALUE, index, index + 1);
         }
          
         public void operator []= (int index, string char) {
             if (StringLength(char) == 1) {
                 VALUE = SubString(VALUE, 0, index) + char + SubString(VALUE, index + 1, Length);
             }
         }

         public thistype Clone() {
             return thistype.create(VALUE);
         }
          
         public bool Equals (thistype toCompare) {
             return (Text == toCompare.Text);
         }
          
         public int GetHashCode() {
             return StringHash(VALUE);
         }
          
         public int indexOf(string value, int start) {
             int length = StringLength(value);
             whilenot (start >= Length) {
                 if (SubString(VALUE, start, start + length) == value) { return start + length; }
                 start++;
             }
             return -1;
         }
          
         public string Insert(int start, string value) {
             return SubString(VALUE, 0, start) + value + SubString(VALUE, start, Length);
         }
          
         public int lastIndexOf(string value) {
             int length = StringLength(value);
             for (int i = Length; i > 0; i--) {
                 if (SubString(VALUE, i - length, i) == value) { return i; }
             }
             return -1;
         }
          
         public int lastIndexOf_Overload(string value, int start) {
             int Length = StringLength(value);
             for (int i = start; i > 0; i--) {
                 if (SubString(VALUE, i - Length, i) == value) { return i; }
             }
             return -1;
         }
          
         public string remove(int start) {
             return SubString(VALUE, 0, start);
         }
          
         public string remove_Overload(int start, int count) {
             return SubString(VALUE, 0, start) + SubString(VALUE, start + count, Length);
         }
          
         public string Replace(string old, string new) {
             int oldLength = StringLength(old);
             int newLength = StringLength(new);
             int Length = Length;
             string out = VALUE;
             for (int i = 0; i < Length; i++) {
                 if (SubString(out, i, i + oldLength) == old) {
                     out = SubString(out, 0, i) + new + SubString(out, i + oldLength, Length);
                     if (oldLength != newLength) { Length = StringLength(out); }
                 } elseif ((Length - i) < oldLength) {
                     break;
                 }
             }
             return out;
         }
          
         public string operator Text() {
             return VALUE;
         }
          
         public void operator Text=(string value) {
             VALUE = value;
             Length = StringLength(value);
         }
          
         public string substring(int start) {
             return SubString(VALUE, start, Length);
         }
          
         public string substring_Overload(int start, int Length) {
             return SubString(VALUE, start, start + Length);
         }
          
          
         public string Trim() {
             string out = VALUE;
             int start = 0, end = Length;
             string temp;
             loop {
                 temp = SubString(out, start, start + 1);
                 exitwhen ((temp != " ") && (temp != "\r") && (temp != "\n"));
                 start++;
             }

             loop {
                 temp = SubString(out, end - 1, end);
                 exitwhen ((temp != " ") && (temp != "\r") && (temp != "\n"));
                 end--;
             }
             if (start > end) { return ""; }
             return SubString(VALUE, start, end);
         }

         public static thistype create(string value) {
             thistype out = thistype.allocate();
             out.VALUE = value;
             out.Length = StringLength(value);
             return out;
         }

     }     
}




Добавлено (11 Октября 2012, 22:57:39)
---------------------------------------------
С англ. у меня плохо, не бейте сильно за плохой текст в примере.
Все методы и операторы я описал комментариями в начале кода (оооочень кривым английским). :)


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек


Сообщение отредактировал Ty3uK - Суббота, 13 Октября 2012, 12:09:22
 

SirNikolasДата: Пятница, 12 Октября 2012, 11:32:44 | Сообщение # 2
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Ty3uK)
public thistype Clone() {
return this;
}
thistype out = allocate();
out.Text = Text;
return out;
Quote (Ty3uK)
public bool Equals (thistype toCompare) {
return (this == toCompare);
}
return Text == toCompare.Text;
А ты сделал ReferenceEquals.
Quote (Ty3uK)
for (int i = start; i < LENGTH; i++) {
if (SubString(VALUE, i, i + length) == value) { return i + length; }
}
whilenot start >= Length {
if (SubString(VALUE, start, start + length) == value) { return start + length; }
start++;
}
Quote (Ty3uK)
public string Insert(int start, string value) {
return SubString(VALUE, 0, start) + value + SubString(VALUE, start, StringLength(VALUE));
}
return SubString(VALUE, 0, start) + value + SubString(VALUE, start, Length);
Quote (Ty3uK)
public string remove(int start) {
return SubString(VALUE, 0, start - 1);
}
Почему -1?
Quote (Ty3uK)
Буду рад критике - алгоритмы не идеальны
Code
public string Trim() {
    int start = 0, end = Length;
    string c;
    loop {
        c = SubString(Text, start, start + 1);
        exitwhen c != " " && c != "\t" && c != "\r" && c != "\n";
        start++;
    }
    loop {
        c = SubString(Text, end - 1, end);
        exitwhen c != " " && c != "\t" && c != "\r" && c != "\n";
        end--;
    }
    if start >= end { return ""; }
    // ^ Возможно, эта проверка и не нужна
    return SubString(Text, start, end);
}


Кстати, на XGM видел нечто подобное.


 

Ty3uKДата: Пятница, 12 Октября 2012, 12:11:56 | Сообщение # 3
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Да, док делал похожее
Спасибо, поправлю. Клон работает и без этого, бтв.


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Пятница, 12 Октября 2012, 16:19:09 | Сообщение # 4
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Ty3uK)
Клон работает и без этого, бтв.
Старый клон:
Code
var s = new String("123");
var s2 = s.Clone();
s2.Text = "456";
BJDebugMsg(s.Text + s2.Text);
//output: 456456
delete s;
Новый клон:
Code
var s = new String("123");
var s2 = s.Clone();
s2.Text = "456";
BJDebugMsg(s.Text + s2.Text);
//output: 123456
delete s, s2;


 

Ty3uKДата: Пятница, 12 Октября 2012, 16:32:29 | Сообщение # 5
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
понял, поправлю. но може
но же и короче:
Code
return thistype.create(VALUE)

:)


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Пятница, 12 Октября 2012, 16:39:06 | Сообщение # 6
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Верно, что-то ступил.

 

Ty3uKДата: Суббота, 13 Октября 2012, 12:09:57 | Сообщение # 7
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
:3

Добавлено (13 Октября 2012, 12:09:57)
---------------------------------------------
Обновил первый пост, большое спасибо за помощь, Ник!


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Суббота, 13 Октября 2012, 14:35:40 | Сообщение # 8
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Всегда пожалуйста.

 

DuosoraДата: Понедельник, 05 Ноября 2012, 15:29:52 | Сообщение # 9
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Ty3uK,
Велоспортом заняться решил? :)
В варке сносный string, чтобы использовать его безо всяких short- и long- вариантов.


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

SirNikolasДата: Понедельник, 05 Ноября 2012, 15:54:36 | Сообщение # 10
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Duosora, это же отличная тренировка для мозгов.

 

DuosoraДата: Понедельник, 05 Ноября 2012, 16:00:08 | Сообщение # 11
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
SirNikolas,
Согласен, но на практике она сделает процесс только медленнее. Если хочется хорошо помучать мозги - напиши новый язык программирования. Классно и на практике полезно. ;)


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

Ty3uKДата: Понедельник, 05 Ноября 2012, 16:38:37 | Сообщение # 12
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Скажем так - диалект один написал

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

СкарДата: Вторник, 06 Ноября 2012, 10:17:42 | Сообщение # 13
5 уровень
Группа: Пользователи
Сообщений: 116
Награды: 0
Репутация: 12
Блокировки:
типа Lolcode или Ook? :D

Если боишься - не делай, если делаешь - не бойся...
 

Ty3uKДата: Вторник, 06 Ноября 2012, 10:48:13 | Сообщение # 14
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
нет
в поиск по форуму - JASP


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

СкарДата: Вторник, 06 Ноября 2012, 10:58:24 | Сообщение # 15
5 уровень
Группа: Пользователи
Сообщений: 116
Награды: 0
Репутация: 12
Блокировки:
Да ладно, это была нотка утреннего троллинга

Если боишься - не делай, если делаешь - не бойся...
 

Ty3uKДата: Вторник, 06 Ноября 2012, 11:28:53 | Сообщение # 16
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
я знаю, про что ты говорил.
Немного не то


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Struct/Class] String (Подобие string в C#)
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz