internal static async void InsertOrIncrementTrackTag(TrackTag trackTag)
        {
            try
            {
                // get the table
                CloudTable table = tableClient.GetTableReference(TrackTagsTable);
                await table.CreateIfNotExistsAsync();

                var exists = await GetTrackTag(trackTag.PartitionKey, trackTag.RowKey);

                if (exists != null)
                {
                    // update
                    exists.count++;
                    TableOperation op = TableOperation.Merge(exists);
                    await table.ExecuteAsync(op);
                }
                else
                {
                    // insert
                    trackTag.count = 1;
                    TableOperation op = TableOperation.InsertOrReplace(trackTag);
                    await table.ExecuteAsync(op);
                }
            }
            catch (StorageException e)
            {
                throw;
            }
        }
        internal static async void DeleteTrackTag(TrackTag trackTag)
        {
            try
            {
                // reference track table
                CloudTable table = tableClient.GetTableReference(TrackTagsTable);
                await table.CreateIfNotExistsAsync();

                TableOperation op = TableOperation.Delete(trackTag);
                await table.ExecuteAsync(op);
            }
            catch
            {
                throw;
            }
        }
        private static TrackTag ReadTrackTag(BinaryReader r, bool rot, bool switchYZ)
        {
            TrackTag t = new TrackTag();

            t.flags = ReadShort(r);
            r.ReadBytes(8);
            t.keys = ReadShort(r);
            ReadShort(r);
            for (ushort i = 0; i < t.keys; ++i)
            {
                TrackTagElement te = new TrackTagElement();
                te.framenum = ReadShort(r);
                r.ReadBytes(4);
                if (rot)
                {
                    te.possibleRotation = r.ReadSingle();
                }
                te.vec = ReadVec3(r, switchYZ);
                t.elements.Add(te);
            }

            return(t);
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="tag"></param>
 /// <param name="message"></param>
 public static void Log(TrackTag tag, string message)
 {
     instance.records.Add(new TrackText {
         Tag = tag, Text = message
     });
 }
 public static void InsertOrIncrementTrackTag(TrackTag trackTag)
 {
     TableStorageRepository.InsertOrIncrementTrackTag(trackTag);
 }
 public static void DeleteTrackTag(TrackTag trackTag)
 {
     TableStorageRepository.DeleteTrackTag(trackTag);
 }