kdlibcpp

Форк
0
/
udtfiled.cpp 
98 строк · 2.6 Кб
1
#include "stdafx.h"
2

3
#include <sstream>
4

5
#include "kdlib/exceptions.h"
6

7
#include "udtfield.h"
8

9
namespace kdlib {
10

11
///////////////////////////////////////////////////////////////////////////////
12

13
const TypeFieldPtr& FieldCollection::lookup(const std::wstring &name) const
14
{
15
    FieldList::const_iterator it;
16
    for (it = m_fields.begin(); it != m_fields.end(); ++it)
17
    {
18
        if ( !(*it)->isInheritedMember() && (*it)->getName() == name)
19
            return *it;
20
    }
21

22
    for (it = m_fields.begin(); it != m_fields.end(); ++it)
23
    {
24
        if ( (*it)->isInheritedMember() && (*it)->getName() == name )
25
            return *it;
26
    }
27

28
    std::wstringstream   sstr;
29
    sstr << L"field \"" << name << L" not found";
30

31
    throw TypeException( m_name, sstr.str() );
32
}
33

34
///////////////////////////////////////////////////////////////////////////////
35

36
TypeFieldPtr& FieldCollection::lookup(const std::wstring &name)
37
{
38
    const TypeFieldPtr &filedPtr = const_cast<const FieldCollection&>(*this).lookup(name);
39
    return const_cast<TypeFieldPtr&>(filedPtr);
40
}
41

42

43
///////////////////////////////////////////////////////////////////////////////
44

45
const TypeFieldPtr& FieldCollection::lookup(size_t index) const
46
{
47
    if ( index >= m_fields.size() )
48
        throw IndexException( index );
49

50
    return m_fields[index];
51
}
52

53
//////////////////////////////////////////////////////////////////////////////
54

55
TypeFieldPtr& FieldCollection::lookup(size_t index)
56
{
57
    const TypeFieldPtr &filedPtr = const_cast<const FieldCollection&>(*this).lookup(index);
58
    return const_cast<TypeFieldPtr&>(filedPtr);
59
}
60

61
//////////////////////////////////////////////////////////////////////////////
62

63
size_t FieldCollection::getIndex(const std::wstring &name) const
64
{
65
    size_t  index = 0;
66

67
    FieldList::const_iterator it;
68
    for ( it = m_fields.begin(); it != m_fields.end(); ++it, ++index )
69
    {
70
        if ( (*it)->getName() == name )
71
            return index;
72
    }
73

74
    std::wstringstream   sstr;
75
    sstr << L"field \"" << name << L" not found";
76

77
    throw TypeException( m_name, sstr.str() );
78
}
79

80
//////////////////////////////////////////////////////////////////////////////
81

82
TypeInfoPtr SymbolUdtField::getTypeInfo()
83
{
84
    return loadType(m_symbol);
85
}
86

87
///////////////////////////////////////////////////////////////////////////////
88

89
NumVariant EnumField::getValue() const
90
{
91
    NumVariant vr;
92
    m_symbol->getValue(vr);
93
    return vr;
94
}
95

96
///////////////////////////////////////////////////////////////////////////////
97

98
} // end kdlib namespace

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.