My introduction to "##"
-
that'd be worthy of a fresh thread here in and of itself.
-- CleaKO The sad part about this instance is that none of the users ever said anything [about the problem]. Pete O`Hanlon Doesn't that just tell you everything you need to know about users?
Correct you are, but should I? Or should it go in, perhaps, the XML/XSL forum? Or an article? Aw heck, here it is, you decide: state.xml
<state Prefix="ST_" Type="sometype" >
<State1>0x01</State1>
<State2>0x02</State2>
<State3>0x03</State3>
</state>state.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output omit-xml-declaration="yes" method="text"/>
<xsl:template match="/">
<xsl:for-each select="*">
typedef enum {
<xsl:for-each select="*">
<xsl:value-of select="../@Prefix"/><xsl:value-of select="name()"/>=<xsl:value-of select="."/>,
<xsl:if test="position()=last()"><xsl:value-of select="../@Prefix"/>LAST=<xsl:value-of select="last()"/></xsl:if>
</xsl:for-each>} <xsl:value-of select="name()"/>type ;
<xsl:value-of select="@Type"/>xsl:text </xsl:text><xsl:value-of select="name()"/>info[] = {
<xsl:for-each select="*">
<xsl:if test="position()!=1">,</xsl:if>{"<xsl:value-of select="../@Prefix"/><xsl:value-of select="name()"/>",0,0}
</xsl:for-each>}
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>result
typedef enum { ST\_State1=0x01, ST\_State2=0x02, ST\_State3=0x03, ST\_LAST=3} statetype ; sometype stateinfo\[\] = { {"ST\_State1",0,0} ,{"ST\_State2",0,0} ,{"ST\_State3",0,0} }
As mentioned elsewhere, the counting of the entries in part two is unnecessary, but notice that here I set the value of ST_LAST to the number of entries.
-
I actually wanted to do that as a project to "learn XML", but just the basics were such a bumpy ride that I contracted some kind of XML allergy. So if you do: A R T I C L E ! ;)
We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP
My first real C# project | Linkify!|FoldWithUs! | sighistBe careful what you ask for.
-
Correct you are, but should I? Or should it go in, perhaps, the XML/XSL forum? Or an article? Aw heck, here it is, you decide: state.xml
<state Prefix="ST_" Type="sometype" >
<State1>0x01</State1>
<State2>0x02</State2>
<State3>0x03</State3>
</state>state.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output omit-xml-declaration="yes" method="text"/>
<xsl:template match="/">
<xsl:for-each select="*">
typedef enum {
<xsl:for-each select="*">
<xsl:value-of select="../@Prefix"/><xsl:value-of select="name()"/>=<xsl:value-of select="."/>,
<xsl:if test="position()=last()"><xsl:value-of select="../@Prefix"/>LAST=<xsl:value-of select="last()"/></xsl:if>
</xsl:for-each>} <xsl:value-of select="name()"/>type ;
<xsl:value-of select="@Type"/>xsl:text </xsl:text><xsl:value-of select="name()"/>info[] = {
<xsl:for-each select="*">
<xsl:if test="position()!=1">,</xsl:if>{"<xsl:value-of select="../@Prefix"/><xsl:value-of select="name()"/>",0,0}
</xsl:for-each>}
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>result
typedef enum { ST\_State1=0x01, ST\_State2=0x02, ST\_State3=0x03, ST\_LAST=3} statetype ; sometype stateinfo\[\] = { {"ST\_State1",0,0} ,{"ST\_State2",0,0} ,{"ST\_State3",0,0} }
As mentioned elsewhere, the counting of the entries in part two is unnecessary, but notice that here I set the value of ST_LAST to the number of entries.
-
You got something here! At a certain point, complexity can be moved around between "participants", but it remains in the project. "clipping components together" can increase complexity by one (thinking on a logarithmic scale) If your target is, however, still two or three orders of complexity away, you are in trouble. I think the idea is to plug together the next layer's "small, primitive classes" from the layer below. However, plugging components may give you the robustness of an application, but components have much higher requirements to be pluggable. At each layer, you spend more and more glue code to fit things together. It helps to start with a "more skilled", higher level language (i.e. start at higher complexity already, so the gap gets smaller), or apply KISS to the project goals (but that's not always possible). Hmmm... no solution, nope.
We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP
My first real C# project | Linkify!|FoldWithUs! | sighistFrom my experience, combining the smallest atomic parts together to create another simple atomic part is simply part of good system design. I've encountered HUGE function classes which have masses of dependancies on other stuff and it's a complete nightmare to figure out. At least with lots of small components you can black box at each level and the whole system becomes that much simpler to comprehend. T
------------------------------- Carrier Bags - 21st Century Tumbleweed.
-
I call a WTF!:laugh:
-- CleaKO The sad part about this instance is that none of the users ever said anything [about the problem]. Pete O`Hanlon Doesn't that just tell you everything you need to know about users?
What's your alternative of choice?
-
Be careful what you ask for.
PIEBALDconsult wrote:
Be careful what you ask for.
I believe this actually is a case where he wants to get what he wishes for..
:badger:
-
PIEBALDconsult wrote:
Be careful what you ask for.
I believe this actually is a case where he wants to get what he wishes for..
:badger:
(He's probably the only one.)
-
I actually wanted to do that as a project to "learn XML", but just the basics were such a bumpy ride that I contracted some kind of XML allergy. So if you do: A R T I C L E ! ;)
We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP
My first real C# project | Linkify!|FoldWithUs! | sighistWish granted, just submitted the article. (Now waiting for the tomatoes to start flying.)
-
Wish granted, just submitted the article. (Now waiting for the tomatoes to start flying.)
Waiting for it to appear...
We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP
My first real C# project | Linkify!|FoldWithUs! | sighist -
I was never one for the intricacies of the C preprocessor. On my latest project, apparently (or rather, unfortunately) someone is. An .h file has a bunch of definitions (real variable names changed to protect the innocent): statedefs.h:
makeState(State1, 0x01) makeState(State2, 0x02) makeState(State3, 0x03)
Odd, I think, but ok. Then I go look up "makeState". What the... 3 entries? That's not a good sign. Instance 1:#define makeState(NAME, NUM) ST_##NAME## = ##NUM##, typedef enum { #include "statedefs.h" ST_LAST } statetype;
Instance 2: Embedded in the middle of a function(!)#undef makestate #define makeState(NAME, NUM) somevariable++; #include "statedefs.h"
Instance 3:#define makestate(NAME, NUM) { "ST_"#NAME,0,0}, sometype stateinfo[] = { #include "statedefs.h" }
There are no external programs being used, no weird autogeneration stuff.. the entire set of code is a replacement for:enum { ST_State1 = 1, ST_State2 = 2, ST_State3 = 3, ST_LAST }
Most editors I've tried cannot tag it, due to the preprocessor concatenation used ("##" in instance 1). References don't work either. And this is one of the easier to read examples of preprocessor abuse... I just try and remind myself that code written this way makes it that much easier on my next job interview! -
(He's probably the only one.)
:laugh: Yeah, maybe.
Agh! Reality! My Archnemesis![^]
| FoldWithUs! | sighist | WhoIncludes - Analyzing C++ include file hierarchy