Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2010, 21:08   #1
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию Прокомментируйте и объясните код

Добрый вечер.Помогите пожалуйста, Прокомментируйте и объясните код ..Можно ли этот код сделать намного проще и понятней?
Файл One_Class.cpp:
Код:
#include <vector>
#include "../Defs.h"

using namespace std;
using namespace Defs_ns;

int ONE_Class::m_errno = -1;

static ONE s_one("D:\\bbb.xml", "D:\\Objects.xml");

SomeClass ONE_Class::one_new ( int &id)
{
   SomeClass* pCls = new SomeClass();
   memset(pCls, 0, sizeof(SomeClass));
   id = s_one.Append(pCls, sizeof(SomeClass));
   return *pCls;
}

SomeClass ONE_Class::one_get ( int id )
{
   std::string& buf = s_one.Get(id);
   const char* d = buf.data();
   return *(SomeClass*)d;
}

bool ONE_Class::one_remove ( int id )
{
   s_one.Remove(id); // no reason to return boolean value
   return true;

}

SomeClass ONE_Class::one_save ( int id, const SomeClass& cls )
{
   std::string& buf = s_one.Get(id);
   SomeClass retVal;
   memcpy(&retVal, buf.data(), sizeof(SomeClass));
   buf.assign((char*)&cls, sizeof(SomeClass));

   s_one.Serialize();
   return retVal;
}

int ONE_Class::one_get_count ( )
{
   return s_one.GetSize();
}


int ONE_Class::one_get_errno ( )
{
   return m_errno;
}
Файл defs.h
Код:
# pragma once
#include <string>
#include <comdef.h>
namespace Defs_ns {
inline void PrintError(const std::string& msg)
{
   throw std::runtime_error(msg);
}

//------------------------------------------------------------------------
void DoSplitPath(const std::string& path, std::string& dir, std::string& fName, std::string& ext);

} // namespace Defs_ns
Файл defs.cpp
Код:
#include "Defs.h"

using namespace std;

namespace Defs_ns{
   void DoSplitPath(const string& path, string& dir, string& fName, string& ext)
   {
      assert(!path.empty());
      dir.clear();
      fName.clear();
      ext.clear();

      // split the 'path'
      static const size_t NULL_CHAR = sizeof(char);
      char driveBuf[_MAX_DRIVE + NULL_CHAR];
      char dirBuf[_MAX_DIR + NULL_CHAR];
      char nameBuf[_MAX_FNAME + NULL_CHAR];
      char extBuf[_MAX_EXT + NULL_CHAR];
      errno_t res = _splitpath_s(path.c_str(), driveBuf, _MAX_DRIVE, dirBuf, _MAX_DIR, nameBuf, _MAX_FNAME, extBuf, _MAX_EXT);
      if ( res )
         PrintError("Failed to split path");

      // build directory from 'path'
      char buff[_MAX_PATH + NULL_CHAR];
      res = sprintf_s(buff, _MAX_PATH, "%s%s", driveBuf, dirBuf);
      if ( res == -1 )
         PrintError("Fail to create directory");
      else
         dir.assign(buff);

      fName.assign(nameBuf);
      ext.assign(extBuf);

      assert(!dir.empty());
      assert(!fName.empty());
      assert(!ext.empty());
   }
и файл ONE_Class.h
Код:
#pragma  once
#include "SomeClass.h"

class ONE_Class : public SomeClass{
public:
   /**
   * Создание нового объекта
   */
   static SomeClass one_new ( int &id);
   /**
   * Считывание объекта по идентификатору
   */
   static SomeClass one_get ( int id );
   /**
   * Удаление объекта по идентификатору
   */
   static bool one_remove ( int id );
   /**
   * Сохранение класса
   */
   static SomeClass one_save ( int id, const SomeClass& );
   /**
   * Возвращает число хранимых объектов
   */
   static int one_get_count ( );
   /**
   * Возвращает значение кода возврата
   */
   static int one_get_errno ( );

private:
      static int m_errno; // код возврата последней операции
};
В SomeClasse описан любой класс без значений , например:
Код:
class SomeClass
{
public:
   // функции
   SomeClass ();

   void func_1 ( int );
   void func_2 ( float ) const;

   // свойства
   int v1;
   int v2;

private:
   // функции
   void func_3 ( char );
   // свойства
   int v3;

public:
   // свойства
   int v4;
};
Serjuk вне форума Ответить с цитированием
Старый 18.05.2010, 17:56   #2
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

помогите кто-нибудь)
Serjuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните кто-нибудь код ASSEMBLERа Steil Помощь студентам 5 16.05.2010 09:10
Объясните код Neymexa SQL, базы данных 1 23.03.2010 17:55
паскаль. массивы. объясните код. [silver beast] Помощь студентам 3 21.01.2009 08:42
Объясните код Neymexa Общие вопросы по Java, Java SE, Kotlin 1 29.11.2008 02:33
объясните код Rend1 Общие вопросы Delphi 18 01.02.2008 14:52