<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'> > NUMBER(array) to yield a LONGCARD<br><br>  This can't be.<br>  Arrays are in-memory data structures. <br>  INTEGER/CARDINAL are an appropriate type<br>  to hold the size of something fits in memory/address-space.<br>  INTEGER is like C's ptrdiff_t. <br>  CARDINAL is kind of like C's size_t, except it is half range. <br>  Word.T is kind of like C's size_t, except it has no convenient in-fix operators. <br><br><br>  Files commonly do not fit in memory/address-space. <br>  So they arguably should have their size stored <br>  in a larger type.<br><br><br> I think there is no easy answer here.<br><br><br> I would be ok with:<br>   - put it back to INTEGER/CARDINAL <br>   - expose another way new way to get a LONGCARD <br> <br><br> - Jay<br><br><br><br><br><div><hr id="stopSpelling">From: rcolebur@SCIRES.COM<br>To: m3devel@elegosoft.com<br>Date: Sun, 29 Sep 2013 22:59:35 +0000<br>Subject: [M3devel] question on File.Status.size<br><br>


<style id="ecxowaParaStyle">
.ExternalClass P {
}
</style>


<div style="direction:ltr;font-family:Tahoma;color:#000000;font-size:10pt;">I've been trying to rebuild all my developed software using my newly rebuilt cm3 from the HEAD branch.<br>
<br>
I've run into some new build errors and have a question.<br>
<br>
It seems the type of File.Status.size has been changed to LONGCARD.<br>
<br>
I have some code that now fails to build because of this change.<br>
<br>
I suppose this interface change is an attempt to better deal with files whose size in bytes is larger than MAX(CARDINAL).<br>
<br>
So, for example:<br>
   fs := FS.Status(file);<br>
   INC(numBytes, fs.size);<br>
no longer works if numBytes is defined as a CARDINAL.  Of course, I can change its type to be LONGCARD, but there will be a ripple effect throughout the code.<br>
<br>
<b>Has the language definition also been updated to allow NUMBER(array) to yield a LONGCARD ?</b><br>
(Interface File uses open arrays)<br>
<br>
In my old language definition, it says that:<br>
<blockquote>
<a name="idx.43" target="_blank">An</a> open array type declaration has the form: <BR>
<pre>    TYPE T = ARRAY OF Element
</pre>
where <tt>Element</tt> is any type. The values of <tt>T</tt> are arrays whose element type is
<tt>Element</tt> and whose length is arbitrary. The index type of an open array is the
<b><tt>INTEGER</tt> subrange </b><tt>[0..n-1]</tt>, where <tt>n</tt> is the length of the array.
</blockquote>
In the past NUMBER(x) always yielded a CARDINAL, not a LONGCARD.  So, if this has changed, I'll need to do some more updates across my code base.<br>
<br>
<b>How does one know in advance if NUMBER(x) is going to yield a CARDINAL or a LONGCARD value, esp. for open arrays?<br>
</b><br>
Thanks,<br>
Randy Coleburn<br>
<br>
</div></div>                                          </div></body>
</html>