Титульная страница Иерархия классов Алфавитный указатель Классы Файлы Члены классов Члены файла Примеры

# NDSTree.cpp

Пример использования классов Context, NDSObject, NDSObjects, String, Exception. Данный пример демонстрирует простейшую программу, которая выводит на консоль дерево NDS начиная с указанного объекта либо корня. Для всех пользователей выводятся их фамилии и номера телефонов.

    #include <stdio.h>
    #include "BGDNet.h"

    using BGDNet::Context;
    using BGDNet::NDSObject;
    using BGDNet::NDSObjects;
    using BGDNet::String;
    using BGDNet::Exception;

    void subtree( const NDSObject* pObj, int level = 0 );

    int main( int argc, char* argv[] )
    {
      try
      {
        Context ctx;
        ctx.dckFlags(ctx.dckFlags() | DCV_TYPELESS_NAMES);
        const char* root = (2 == argc) ? argv[1] : "[Root]";
        NDSObject cont(ctx, root);
        subtree(&cont);
      }
      catch (const Exception& e)
      {
        printf("ERROR: %s\n", e.what());
      }
      puts("----------");

      return 0;
    }

    void subtree( const NDSObject* pObj, int level )
    {
      const int MAX_LEVEL = 50;
      if (level < MAX_LEVEL)
      {
        char buf[MAX_LEVEL + 1];
        memset(buf, ' ', level);
        buf[level] = '\0';
        const char* base = pObj->baseClass().ptr();
        if (strcmp("User", base))
          printf("%s%s (%s)\n", buf, pObj->rdn().ptr(), base);
        else
        {
          String surname, phone;
          pObj->attr("Surname", &surname);
          pObj->attr("Telephone Number", &phone);
          printf("%s%s (%s) - %s, \"%s\"\n",
            buf, pObj->rdn().ptr(), base, surname.ptr(), phone.ptr());
        }

        if (pObj->isContainer())
        {
          NDSObjects sub;
          pObj->getSubordinates(&sub);
          for (int i = 0; i < sub.size(); ++i)
            subtree(sub[i], level + 2);
        }
      }
    }