<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Kleines Ringpuffer problem]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>und zwar hab ich mir einen kleinen Ringpuffer geschrieben, der aber in einen Sonderfall nicht mehr schreiben mag. Hier mal der Sourceausschnitt dazu:</p>
<pre><code class="language-cpp">bool CircularBuffer::WriteByte(char c)
{
	if(cb != NULL)
	{
		if(rp == (wp + 1) % cs)
			return false;
		else
		{
			memcpy((char*)cb + wp, &amp;c, 1);
			wp = (wp + 1) % cs;
			return true;
		}
	}
	return false;
}
</code></pre>
<p>rp = readpointer = 0;<br />
wp = writepointer = 0;<br />
cs = puffergröße = 64bytes</p>
<p>Möchte ich nun in diesen Puffer 64 bytes reinschreiben geht das nicht, da der Modulo anspringt, obwohl ja genug platz wäre. Der zweite fall ist zB: rp = 0; wp = 63; cs = 64; -&gt; geht auch nicht (oder die restgrößen berechnung ist falsch bei mir)</p>
<pre><code class="language-cpp">unsigned int CircularBuffer::GetReadSize()
{
	if(rp == wp)
		return 0;
	if(rp &lt; wp)
		return (wp - rp);
	if(rp &gt; wp)
		return (cs - rp) + wp;
	return 0;
}

unsigned int CircularBuffer::GetWriteSize()
{
	if(wp == rp)
		return cs;
	if(wp &lt; rp)
		return (rp - wp);
	if(wp &gt; rp)
		return (cs - wp) + rp;
	return 0;
}
</code></pre>
<p>Hat da jemand Ideen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180932/kleines-ringpuffer-problem</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 00:37:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180932.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 May 2007 11:57:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kleines Ringpuffer problem on Tue, 08 May 2007 11:57:11 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>und zwar hab ich mir einen kleinen Ringpuffer geschrieben, der aber in einen Sonderfall nicht mehr schreiben mag. Hier mal der Sourceausschnitt dazu:</p>
<pre><code class="language-cpp">bool CircularBuffer::WriteByte(char c)
{
	if(cb != NULL)
	{
		if(rp == (wp + 1) % cs)
			return false;
		else
		{
			memcpy((char*)cb + wp, &amp;c, 1);
			wp = (wp + 1) % cs;
			return true;
		}
	}
	return false;
}
</code></pre>
<p>rp = readpointer = 0;<br />
wp = writepointer = 0;<br />
cs = puffergröße = 64bytes</p>
<p>Möchte ich nun in diesen Puffer 64 bytes reinschreiben geht das nicht, da der Modulo anspringt, obwohl ja genug platz wäre. Der zweite fall ist zB: rp = 0; wp = 63; cs = 64; -&gt; geht auch nicht (oder die restgrößen berechnung ist falsch bei mir)</p>
<pre><code class="language-cpp">unsigned int CircularBuffer::GetReadSize()
{
	if(rp == wp)
		return 0;
	if(rp &lt; wp)
		return (wp - rp);
	if(rp &gt; wp)
		return (cs - rp) + wp;
	return 0;
}

unsigned int CircularBuffer::GetWriteSize()
{
	if(wp == rp)
		return cs;
	if(wp &lt; rp)
		return (rp - wp);
	if(wp &gt; rp)
		return (cs - wp) + rp;
	return 0;
}
</code></pre>
<p>Hat da jemand Ideen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280834</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Tue, 08 May 2007 11:57:11 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Ringpuffer problem on Tue, 08 May 2007 12:07:59 GMT]]></title><description><![CDATA[<p>merk dir in einer zusätzlichen variable, wieviele bytes im buffer sind, das ist einfacher...<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280846</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Tue, 08 May 2007 12:07:59 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Ringpuffer problem on Tue, 08 May 2007 13:43:12 GMT]]></title><description><![CDATA[<p><code>(wp + 1) % cs</code> sollte eine (private) (inline) Methode <code>next_index</code> sein, meinst du nicht?</p>
<p>Bezeichner dürfen außerdem auch länger als 2 Zeichen sein.</p>
<pre><code class="language-cpp">// sieht huebscher aus:
std::size_t CircularBuffer::GetReadSize()
{
  return   (rp == wp) ? 0
         : (rp &lt;  wp) ? (wp - rp)
         :              (cs - rp) + wp;
}
</code></pre>
<p>Zu deinem Problem: du brauchst entweder ein Dummy-Element oder musst dir die Restgröße merken - wie willst du sonst zwischen voll und leer unterscheiden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280920</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Tue, 08 May 2007 13:43:12 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Ringpuffer problem on Tue, 08 May 2007 13:58:17 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// sieht huebscher aus:
</code></pre>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280928</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Tue, 08 May 2007 13:58:17 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Ringpuffer problem on Tue, 08 May 2007 14:01:53 GMT]]></title><description><![CDATA[<p>pale dog schrieb:</p>
<blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280930</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Tue, 08 May 2007 14:01:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Ringpuffer problem on Tue, 08 May 2007 14:04:04 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Bezeichner dürfen außerdem auch länger als 2 Zeichen sein.</p>
<pre><code class="language-cpp">// sieht huebscher aus:
std::size_t CircularBuffer::GetReadSize()
{
  return   (rp == wp) ? 0
         : (rp &lt;  wp) ? (wp - rp)
         :              (cs - rp) + wp;
}
</code></pre>
</blockquote>
<p>Ansichtssache. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> , aber ich glaube du hast recht das ich noch ein Dummy brauch. Danke erst mal für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280933</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Tue, 08 May 2007 14:04:04 GMT</pubDate></item></channel></rss>