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

1.1     ! paf         1: /**    @page ClassExample1  Пример создания простого класса (только методы)
        !             2: 
        !             3: Чтобы создать свой класс, состоящий только из методов[таков, например, класс random], 
        !             4: нужно положить в каталог classes/ модуль на C++ с расширением .С,
        !             5: в котором...
        !             6: 
        !             7: 1. Определить потомка Methoded, определяющего Methoded::used_directly в true.
        !             8: 
        !             9: 2. Оформить методы объекта так[ Native_code_ptr ]:
        !            10: @code
        !            11: static void _test(Request& r, const String& method_name, MethodParams *params) {
        !            12:        Pool& pool=r.pool();
        !            13: 
        !            14:        ...
        !            15: 
        !            16:        // ошибки генерировать так:
        !            17:        if(error_code)
        !            18:                PTHROW(0, 0,
        !            19:                        &method_name, // адрес String, содержащей текст/место ошибки
        !            20:                        "проблема %d", error_code);
        !            21: 
        !            22:        // выдавать текст так:
        !            23:        if(text_result)
        !            24:                r.write_assign_lang(*new(pool) VString(pool, "тест"));
        !            25: 
        !            26:        // выдавать объекты так:
        !            27:        if(object_result)
        !            28:                r.write_no_lang(*new(pool) VInt(pool, 48));
        !            29: }
        !            30: @endcode
        !            31: 
        !            32: 3. В конструкторе задать имя класса и зарегистрировать методы:
        !            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: 
        !            46: 4. И, наконец, определить производящую функцию, с именем M{имя_файла_с_заглавной_буквы}_create:
        !            47: @code
        !            48: Methoded *MExample1_create(Pool& pool) {
        !            49:        return new(pool) MExample1(pool);
        !            50: }
        !            51: @endcode
        !            52: 
        !            53: */

E-mail: