// MetaDataOfClasses.h: interface for the CMetaDataOfClasses class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_METADATAOFCLASSES_H__F1BE676F_903A_4D46_99F1_123B72722A0A__INCLUDED_)
#define AFX_METADATAOFCLASSES_H__F1BE676F_903A_4D46_99F1_123B72722A0A__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//#include "SetOfHierarchy.h"
//#include "Preprocessor.h"
#include "istrmap.h"

//#include "system\\GlobalMethods.h"
void RuntimeError(const char *msg, ...);

class CRangesOfDescr;

struct CMetaDataOfClasses  
{

	CMetaDataOfClasses();
	~CMetaDataOfClasses();
  static void RemoveNeedlessBlank(CString &str);

  // Метод разбирает строку текста и заполняет внутренние структуры класса. 
  // Строка должна состоять из объявлений классов с привязкой к именам файлов 
  // хранящих реализацию и иерархической структуры этих классов	
  void ParsingString(CString& StringForParse, CRangesOfDescr& RangesDescr);

  // Хранит связи названий классов 1С (для возможности использовать 
  // СоздатьОбъект(<ИмяКласса>) и файлов в которых находиться реализация данных классов
	CIStringMapToString m_ClassBindFile;

  // тоже самое для динамически добавляемых классов
	CIStringMapToString m_DynamicAddedClassBindFile;
	bool m_bInsideDynamicAdd;
	
  // Хранит строки названий классов и связанный с ним список названий базовых классов
	CIStringMapToOb m_ClassesHierarchyMap;
  
  // Содержит синонимы каталогов из файла ini компоненты
  CIStringMapToString m_AliasOfPaths;

  // Содержит типы методов классов для строгой проверки
  CIStringMapToOb m_TypeOfClassMeth;  

  typedef CArray<NameBindOfType*, NameBindOfType*> ARR_TYPE_NAME;

  // Ключ - имя класса плюс имя метода в котором присутствует параметр передаваемый по значению
  CIStringMapToOb m_ValParamInMeth;

  // Ключ - имя класса плюс имя метода в котором присутствует неограниченное количество параметров (...)
  CIStringMapToOb m_UnlimitsParams;
  
  // Содержит полный путь к файлу описания для класса
  CIStringMapToString m_FullFileNameOfDescrFile;

private:
	void MessageBox(
		HWND hWnd ,
		const CString& lpText,
		const CString& lpCaption,
		UINT uType)
	{
		if(!m_bInsideDynamicAdd)
			::MessageBox(hWnd, lpText, lpCaption, uType);
		else
			RuntimeError("%s -- %s", lpCaption, lpText);
	}
};

#endif // !defined(AFX_METADATAOFCLASSES_H__F1BE676F_903A_4D46_99F1_123B72722A0A__INCLUDED_)
