Esempio n. 1
0
        public override byte[] Export()
        {
            uint nExportSize = 8;
            uint nDindex     = 0;

            byte[] retBytes = null;
            byte[] bytes    = null;
            uint   nLen     = 0;

            if (m_Data != null)
            {
                for (uint i = 0; i < m_Data.Count; i++)
                {
                    if (m_Data[i] == null)
                    {
                        continue;
                    }
                    CUniStruct <T> vrItem = (CUniStruct <T>)m_Data[i];
                    nExportSize += vrItem.ExportSize();
                    nLen++;
                }
            }
            retBytes = new byte[nExportSize];
            CUniStruct <T> .uint2byte((uint)UNISMAG.UNISARRAY, ref retBytes, nDindex);

            nDindex += 4;
            CUniStruct <T> .uint2byte((uint)nLen, ref retBytes, nDindex);

            nDindex += 4;
            if (m_Data != null)
            {
                for (uint i = 0; i < m_Data.Count; i++)
                {
                    if (m_Data[i] == null)
                    {
                        continue;
                    }
                    CUniStruct <T> vrItem = (CUniStruct <T>)m_Data[i];
                    bytes = vrItem.Export();
                    Array.Copy(bytes, 0, retBytes, nDindex, bytes.Length);
                    nDindex += (uint)bytes.Length;
                }
            }
            return(retBytes);
        }
Esempio n. 2
0
        public uint ExportSize(T srcObj, bool bHavMag)
        {
            if (srcObj == null)
            {
                return(0);
            }
            Type t = srcObj.GetType();

            FieldInfo[] fiarr = t.GetFields();
            if (fiarr == null)
            {
                return(0);
            }
            uint nExportSize = 0;

            if (bHavMag)
            {
                nExportSize += 4;
            }
            CUniStruct <object> pUnkownObj = new CUniStruct <object>();
            uint nCount = (uint)fiarr.GetLength(0);

            for (uint i = 0; i < nCount; i++)
            {
                object poValue = fiarr[i].GetValue(srcObj);
                Type   itt     = fiarr[i].FieldType;
                if ((poValue != null) && ((itt == typeof(UniSZ)) || (itt == typeof(UniDW))))
                {
                    UniVarItem puiValue = (UniVarItem)poValue;
                    if (!puiValue.IsValid())
                    {
                        continue;
                    }
                }
                nExportSize += 4;
                if (poValue == null)
                {
                    continue;
                }
                if (itt == typeof(UniSZ))
                {
                    UniSZ pValue = (UniSZ)poValue;
                    if (!pValue.IsEmpty() && !pValue.IsLock())
                    {
                        nExportSize += pValue.Size();
                    }
                }
                else if (itt == typeof(UniDW))
                {
                    UniDW pValue = (UniDW)poValue;
                    if (!pValue.IsEmpty() && !pValue.IsLock())
                    {
                        nExportSize += 4;
                    }
                }
                else
                {
                    nExportSize -= 4;
                    uint nSize = pUnkownObj.ExportSize(poValue, false);
                    nExportSize += nSize;
                }
            }
            return((uint)nExportSize);
        }