Annotation of parser3/src/doc/ClassExample1.dox, revision 1.2

1.2     ! paf         1: /**    @page ClassExample1  Пример создания простого класса (только методы)
1.1       paf         2: 
1.2     ! paf         3: Чтобы создать свой класс, состоящий только из методов[таков, например, класс random], 
        !             4: нужно положить в каталог classes/ модуль на C++ с расширением .С,
        !             5: в котором...
1.1       paf         6: 
1.2     ! paf         7: 1. Определить потомка Methoded, определяющего Methoded::used_directly в true.
1.1       paf         8: 
1.2     ! paf         9: 2. Оформить методы объекта так[ Native_code_ptr ]:
1.1       paf        10: @code
                     11: static void _test(Request& r, const String& method_name, MethodParams *params) {
                     12:        Pool& pool=r.pool();
                     13: 
                     14:        ...
                     15: 
1.2     ! paf        16:        // ошибки генерировать так:
1.1       paf        17:        if(error_code)
                     18:                PTHROW(0, 0,
1.2     ! paf        19:                        &method_name, // адрес String, содержащей текст/место ошибки
        !            20:                        "проблема %d", error_code);
1.1       paf        21: 
1.2     ! paf        22:        // выдавать текст так:
1.1       paf        23:        if(text_result)
1.2     ! paf        24:                r.write_assign_lang(*new(pool) VString(pool, "тест"));
1.1       paf        25: 
1.2     ! paf        26:        // выдавать объекты так:
1.1       paf        27:        if(object_result)
                     28:                r.write_no_lang(*new(pool) VInt(pool, 48));
                     29: }
                     30: @endcode
                     31: 
1.2     ! paf        32: 3. В конструкторе задать имя класса и зарегистрировать методы:
1.1       paf        33: 
                     34: @code
                     35: MExample1::MExample1(Pool& apool) : Methoded(apool) {
                     36:        set_name(*NEW String(pool(), "example1"));
                     37: 
                     38: 
                     39:        // ^example1:test[]
                     40:        add_native_method("test", Method::CT_STATIC, _test, 0, 0);
                     41: }
                     42: @endcode
                     43: 
                     44: @see Value::set_name, VStateless_class::add_native_method
                     45: 
1.2     ! paf        46: 4. И, наконец, определить производящую функцию, с именем M{имя_файла_с_заглавной_буквы}_create:
1.1       paf        47: @code
                     48: Methoded *MExample1_create(Pool& pool) {
                     49:        return new(pool) MExample1(pool);
                     50: }
                     51: @endcode
1.2     ! paf        52: 
        !            53: 5. Если для работы классу необходимы какие-то настройки, то их можно принять из системного auto.p,
        !            54: или из пользовательского MAIN класса, переопределив Methoded::configure_admin и/или Methoded::configure_user.
1.1       paf        55: 
                     56: */

E-mail: