📄 type.cpp
字号:
#include "type.h"
StringPool::StringPool()
:_curPos(0)
{
}
int StringPool::Add(const char* str)
{
MapBucket b;
b = _indexer.Exsits(MapBucket(str));
if (b._index != -1)
{
return b._index;
}
b._index = _curPos;
b._str = str;
strcpy(_pool + _curPos, str);
_curPos += (strlen(str) + 1);
_indexer.Insert(b);
return b._index;
}
void StringPool::Store(FILE* fp)
{
fwrite(_pool, sizeof(char), _curPos, fp);
}
FieldDesc::FieldDesc()
:_name(0), _size(0), _type(Void)
{
}
MethodDesc::MethodDesc()
:_addr(0), _isEntry(false), _maxStack(0), _name(0), _retType(Void)
{
}
MetaDataDesc::MetaDataDesc()
{
}
void MetaDataDesc::AddMethod(MethodDesc& method)
{
_methods.PushBack(method);
}
void MetaDataDesc::Store(FILE* file)
{
List<FieldDesc>::Iterator fi(_fields);
List<MethodDesc>::Iterator mi(_methods);
for (fi.First(); !fi.IsDone(); fi.Next())
{
fwrite(&(fi.Current()), sizeof(FieldDesc), 1, file);
}
for (mi.First(); !mi.IsDone(); mi.Next())
{
fwrite(&(mi.Current()), sizeof(MethodDesc), 1, file);
}
}
int Key(const MethodBucket& b)
{
return (int)(b._name) % PRIME;
}
int Key(const MapBucket& b)
{
return (int)((b._str)[0] % PRIME);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -