Click here to Skip to main content
15,893,486 members
Articles / Programming Languages / SQL

SqlLinq: Taking LINQ to SQL in the Other Direction

Rate me:
Please Sign up or sign in to vote.
4.96/5 (50 votes)
12 Nov 2009CPOL13 min read 103.9K   1.1K   145  
Parsing SQL statements to create LINQ Expressions.
using System;
using System.Runtime.InteropServices;

namespace Kackman.Framework.Diagnostics
{
    /// <summary>
    /// A timer that uses the windows tick count
    /// </summary>
    public sealed class TickCountTimer : Timer
    {
        private double m_fLastElapsedTime;
        private double m_fBaseTime;
        private double m_fStopTime;
        private bool m_bTimerStopped;

        [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously
        [DllImport("winmm.dll")]
        private static extern int timeGetTime();

        /// <summary>
        /// Creates a new instance of the class
        /// </summary>
        public TickCountTimer()
        {
        }

        /// <summary>
        /// <see cref="Timer.Start"/>
        /// </summary>
        public override void Start()
        {
            double time = GetTime();

            if (m_bTimerStopped)
                m_fBaseTime += time - m_fStopTime;

            m_fStopTime = 0.0;
            m_fLastElapsedTime = time;
            m_bTimerStopped = false;
        }

        /// <summary>
        /// <see cref="Timer.Reset"/>
        /// </summary>
        public override void Reset()
        {
            double time = GetTime();

            m_fBaseTime = time;
            m_fLastElapsedTime = time;
            m_fStopTime = 0;
            m_bTimerStopped = false;
        }

        /// <summary>
        /// <see cref="Timer.Stop"/>
        /// </summary>
        public override void Stop()
        {
            if (!m_bTimerStopped)
            {
                double time = GetTime();

                m_fStopTime = time;
                m_fLastElapsedTime = time;
                m_bTimerStopped = true;
            }
        }

        /// <summary>
        /// <see cref="Timer.Advance"/>
        /// </summary>
        public override void Advance()
        {
            m_fStopTime += 0.1;
        }

        /// <summary>
        /// <see cref="Timer.AbsoluteTime"/>
        /// </summary>
        public override double AbsoluteTime
        {
            get
            {
                return GetTime();
            }
        }

        /// <summary>
        /// <see cref="Timer.ElapsedTime"/>
        /// </summary>
        public override double ElapsedTime
        {
            get
            {
                double time = GetTime();
                double fElapsedTime = time - m_fLastElapsedTime;

                m_fLastElapsedTime = time;
                return fElapsedTime;
            }
        }

        /// <summary>
        /// <see cref="Timer.ApplicationTime"/>
        /// </summary>
        public override double ApplicationTime
        {
            get
            {
                return GetTime() - m_fBaseTime;
            }
        }

        private double GetTime()
        {
            if (m_fStopTime != 0.0)
                return m_fStopTime;

            return timeGetTime() * 0.001;
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Team Leader Starkey Laboratories
United States United States
The first computer program I ever wrote was in BASIC on a TRS-80 Model I and it looked something like:
10 PRINT "Don is cool"
20 GOTO 10

It only went downhill from there.

Hey look, I've got a blog

Comments and Discussions