예제 #1
0
        public void TryFind()
        {
            var map = FSharpMap.Create(Tuple.Create(1, "one"), Tuple.Create(2, "two"));
            var r   = map.TryFind(2).Match(x => x, () => "not found");

            Assert.AreEqual("two", r);
        }
예제 #2
0
파일: MainForm.cs 프로젝트: EMJK/pp-pretwa
 private void MakeAIMove(NextMove nextMove)
 {
     ThreadPool.QueueUserWorkItem(_ =>
     {
         while (_CurrentPlayer.IsRed)
         {
             Thread.Sleep(750);
             var move = Board.moveOfTheComputer(_State, nextMove);
             var moveResult = Board.applyMove(move.Item1, move.Item2, _State);
             _State = moveResult.Item1;
             _CurrentPlayer = GetNextPlayer(moveResult.Item2);
             visualState1.CurrentPlayer = _CurrentPlayer;
             var validMoves = Board.allValidMoves(moveResult.Item2, moveResult.Item1);
             visualState1.Draw(moveResult.Item1, validMoves);
             if (CheckAndDisplayWinner())
             {
                 this.Invoke(new MethodInvoker(() =>
                 {
                     this.Enabled = true;
                     visualState1.Enabled = false;
                 }));
                 return;
             }
         }
         this.Invoke(new MethodInvoker(() => { this.Enabled = true; }));
     });
 }
예제 #3
0
 private void MakeAIMove(NextMove nextMove)
 {
     ThreadPool.QueueUserWorkItem(_ =>
     {
         while (_CurrentPlayer.IsRed)
         {
             Thread.Sleep(750);
             var move                   = Board.moveOfTheComputer(_State, nextMove);
             var moveResult             = Board.applyMove(move.Item1, move.Item2, _State);
             _State                     = moveResult.Item1;
             _CurrentPlayer             = GetNextPlayer(moveResult.Item2);
             visualState1.CurrentPlayer = _CurrentPlayer;
             var validMoves             = Board.allValidMoves(moveResult.Item2, moveResult.Item1);
             visualState1.Draw(moveResult.Item1, validMoves);
             if (CheckAndDisplayWinner())
             {
                 this.Invoke(new MethodInvoker(() =>
                 {
                     this.Enabled         = true;
                     visualState1.Enabled = false;
                 }));
                 return;
             }
         }
         this.Invoke(new MethodInvoker(() => { this.Enabled = true; }));
     });
 }
        public RecordedMapModel(IEnumerable <KeyValuePair <TKeyType, TValueType> > keyValuePairs) : this()
        {
            Contract.Requires <ArgumentNullException>(keyValuePairs != null);

            foreach (var e in keyValuePairs)
            {
                Map = Map.Add(e.Key, e.Value);
            }
        }
예제 #5
0
        private void StartNewGame()
        {
            visualState1.Enabled = true;
            _State         = Board.defaultBoardState;
            _CurrentPlayer = Player.Black;
            var moves = Board.validMovesForColor(FieldState.NewColor(Player.Black), _State);

            visualState1.CurrentPlayer = Player.Black;
            visualState1.Draw(_State, moves);
        }
예제 #6
0
 public override void Write(Utf8JsonWriter writer, FSharpMap <string, T> value, JsonSerializerOptions options)
 {
     writer.WriteStartObject();
     foreach (var item in value)
     {
         writer.WritePropertyName(options.DictionaryKeyPolicy.ConvertName(item.Key));
         JsonSerializer.Serialize(writer, item.Value, options);
     }
     writer.WriteEndObject();
 }
        public static FSharpMap<string, string> ConvertCsMapToFSharpMap(Dictionary<string, string> data)
        {
            var map = new FSharpMap<string, string>(new List<Tuple<string, string>>());
            foreach (var elem in data)
            {
                map = map.Add(elem.Key, elem.Value);
            }

            return map;
        }
예제 #8
0
 private static void FSharpMap_Get(long count, FSharpMap <long, long> im)
 {
     using (Benchmark.Run("Get", count))
     {
         var sum = 0L;
         for (int i = 0; i < count; i++)
         {
             sum += im[i];
         }
     }
 }
예제 #9
0
 public static FSharpMap <TKey, TValue> WithGuaranteedEntry <TKey, TValue>(this FSharpMap <TKey, TValue> map, TKey key, Func <TValue> toAddIfNotPresent)
 {
     if (map.ContainsKey(key))
     {
         return(map);
     }
     else
     {
         return(map.Add(key, toAddIfNotPresent()));
     }
 }
예제 #10
0
 public void New() {
     FSharpMap<int, string> m1 = FSharpMap.Create(Tuple.Create(1, "one"), Tuple.Create(2, "two"));
     FSharpMap<int, string> m2 = new FSharpMap<int, string>(new[] {
         Tuple.Create(1, "one"), 
         Tuple.Create(2, "two"),
     });
     FSharpMap<int, string> m3 = new FSharpMap<int, string>(Enumerable.Empty<Tuple<int, string>>()) {
         { 1, "one" },
         { 2, "two" },
     };            
     Assert.AreEqual(m1, m2);
 }
        public void FSharpMapTest_0_Success()
        {
            var collection = new FSharpMap <int, int>(Enumerable.Empty <Tuple <int, int> >());
            var target     = this.CreateTarget <FSharpMap <int, int> >();

            using (var buffer = new MemoryStream())
            {
                target.Pack(buffer, collection);
                buffer.Position = 0;
                var unpacked = target.Unpack(buffer);
                buffer.Position = 0;
                Assert.That(unpacked.ToArray(), Is.EqualTo(collection.ToArray()));
            }
        }
예제 #12
0
        public void DeepCopyTests_FSharp_Collections()
        {
            // F# list
            {
                var original = FSharpList <int> .Empty;
                var copy     = (FSharpList <int>) this.fixture.SerializationManager.DeepCopy(original);
                Assert.Equal(original, copy);
            }
            {
                var original = ListModule.OfSeq(new List <int> {
                    0, 1, 2
                });
                var copy = (FSharpList <int>) this.fixture.SerializationManager.DeepCopy(original);
                Assert.Equal(original, copy);
            }

            // F# set
            {
                var original = new FSharpSet <int>(new List <int>());
                var copy     = (FSharpSet <int>) this.fixture.SerializationManager.DeepCopy(original);
                Assert.Equal(original, copy);
            }
            {
                var elements = new List <int>()
                {
                    0, 1, 2
                };
                var original = SetModule.OfSeq(elements);
                var copy     = (FSharpSet <int>) this.fixture.SerializationManager.DeepCopy(original);
                Assert.Equal(original, copy);
            }

            // F# map
            {
                var original = new FSharpMap <int, string>(new List <Tuple <int, string> >());
                var copy     = (FSharpMap <int, string>) this.fixture.SerializationManager.DeepCopy(original);
                Assert.Equal(original, copy);
            }
            {
                var elements = new List <Tuple <int, string> >()
                {
                    new Tuple <int, string>(0, "zero"),
                    new Tuple <int, string>(1, "one")
                };
                var original = MapModule.OfSeq(elements);
                var copy     = (FSharpMap <int, string>) this.fixture.SerializationManager.DeepCopy(original);
                Assert.Equal(original, copy);
            }
        }
        public void Map()
        {
            FSharpMap <string, int> m1 = MapModule.OfSeq(new List <Tuple <string, int> > {
                Tuple.Create("one", 1), Tuple.Create("II", 2), Tuple.Create("3", 3)
            });

            string json = JsonConvert.SerializeObject(m1, Formatting.Indented);

            FSharpMap <string, int> m2 = JsonConvert.DeserializeObject <FSharpMap <string, int> >(json);

            Assert.AreEqual(m1.Count, m2.Count);
            Assert.AreEqual(1, m2["one"]);
            Assert.AreEqual(2, m2["II"]);
            Assert.AreEqual(3, m2["3"]);
        }
예제 #14
0
        public void New()
        {
            FSharpMap <int, string> m1 = FSharpMap.Create(Tuple.Create(1, "one"), Tuple.Create(2, "two"));
            FSharpMap <int, string> m2 = new FSharpMap <int, string>(new[] {
                Tuple.Create(1, "one"),
                Tuple.Create(2, "two"),
            });
            FSharpMap <int, string> m3 = new FSharpMap <int, string>(Enumerable.Empty <Tuple <int, string> >())
            {
                { 1, "one" },
                { 2, "two" },
            };

            Assert.AreEqual(m1, m2);
        }
예제 #15
0
        private static FSharpMap <long, long> FSharpMap_Add(long count)
        {
            FSharpMap <long, long> im;

            im = new FSharpMap <long, long>(Enumerable.Empty <Tuple <long, long> >());
            using (Benchmark.Run("Add", count))
            {
                for (int i = 0; i < count; i++)
                {
                    im = im.Add(i, i);
                }
            }

            return(im);
        }
예제 #16
0
        public WorldModel(
            FSharpMap<int, EntityModel> entity,
            FSharpMap<int, TaskModel> task,
            FSharpMap<int, PlanModel> plan,
            FSharpMap<EntityModel, FSharpSet<EntityModel>> holding,
            FSharpMap<EntityModel, FSharpSet<TaskModel>> doing,
            FSharpMap<TaskModel, FSharpSet<PlanModel>> belongsTo)
        {
            Entity = entity;
            Task = task;
            Plan = plan;

            Holding = holding;
            Doing = doing;
            BelongsTo = belongsTo;
        }
예제 #17
0
        public WorldModel(
            FSharpMap <int, EntityModel> entity,
            FSharpMap <int, TaskModel> task,
            FSharpMap <int, PlanModel> plan,
            FSharpMap <EntityModel, FSharpSet <EntityModel> > holding,
            FSharpMap <EntityModel, FSharpSet <TaskModel> > doing,
            FSharpMap <TaskModel, FSharpSet <PlanModel> > belongsTo)
        {
            Entity = entity;
            Task   = task;
            Plan   = plan;

            Holding   = holding;
            Doing     = doing;
            BelongsTo = belongsTo;
        }
예제 #18
0
        public void Draw(FSharpMap <FieldCoords, FieldState> state, FSharpList <Tuple <FieldCoords, FSharpOption <FieldCoords>, FieldCoords> > validMoves)
        {
            State       = state;
            _ValidMoves = validMoves;

            Bitmap   bmp    = new Bitmap(_CanvasSize, _CanvasSize);
            Graphics canvas = Graphics.FromImage(bmp);

            DrawGrid(canvas);
            DrawFields(canvas);
            //DrawPossibleMoves(canvas);
            //DrawCoords(canvas);

            canvas.Flush();
            canvas.Dispose();

            _MainPictureBox.Image = bmp;
        }
        public override int Serialize(ref byte[] bytes, int offset, FSharpMap <TKey, TValue> value)
        {
            if (value == null)
            {
                BinaryUtil.WriteInt32(ref bytes, offset, -1);
                return(4);
            }

            var startOffset = offset;

            offset += BinaryUtil.WriteInt32(ref bytes, offset, value.Count);

            foreach (var item in value)
            {
                offset += kvpFormatter.Serialize(ref bytes, offset, item);
            }

            return(offset - startOffset);
        }
예제 #20
0
        public void FSharpMap()
        {
            var count  = TestUtils.GetBenchCount(1_000_000);
            var rounds = 200;
            var im     = new FSharpMap <long, long>(Enumerable.Empty <Tuple <long, long> >());

            for (int r = 0; r < rounds; r++)
            {
                im = FSharpMap_Add(count);

                FSharpMap_Get(count, im);
            }

            Benchmark.Dump();

            // After more correct benchmark (separate methods)
            // Case                |    MOPS |  Elapsed |   GC0 |   GC1 |   GC2 |  Memory
            //----                 |--------:|---------:|------:|------:|------:|--------:
            //Get                  |    6.76 |   148 ms |   0.0 |   0.0 |   0.0 | 0.000 MB
            //Add                  |    1.01 |   990 ms | 146.2 |   6.5 |   1.8 | 46.226 MB
        }
예제 #21
0
        private void VisualState1OnMoveRequested(object sender, Tuple <FieldCoords, FieldCoords> tuple)
        {
            var moveResult = Board.applyMove(tuple.Item1, tuple.Item2, _State);

            _State = moveResult.Item1;
            var validMoves = Board.allValidMoves(moveResult.Item2, moveResult.Item1);

            _CurrentPlayer             = GetNextPlayer(moveResult.Item2);
            visualState1.CurrentPlayer = _CurrentPlayer;
            visualState1.Draw(_State, validMoves);

            if (CheckAndDisplayWinner())
            {
                visualState1.Enabled = false;
                return;
            }

            if (_CurrentPlayer.IsRed && _EnableAI)
            {
                this.Enabled = false;
                MakeAIMove(moveResult.Item2);
            }
        }
예제 #22
0
 public ImmutableMap(IEnumerable <Tuple <TKey, TValue> > pairs)
 {
     innerMap = new FSharpMap <TKey, TValue>(pairs);
 }
예제 #23
0
파일: MainForm.cs 프로젝트: EMJK/pp-pretwa
 private void StartNewGame()
 {
     visualState1.Enabled = true;
     _State = Board.defaultBoardState;
     _CurrentPlayer = Player.Black;
     var moves = Board.validMovesForColor(FieldState.NewColor(Player.Black), _State);
     visualState1.CurrentPlayer = Player.Black;
     visualState1.Draw(_State, moves);
 }
예제 #24
0
 private static void SaveWorkbook(FSharpMap<string, QT4.qt4<CellContent>> workbook)
 {
     HttpContext.Current.Session["Workbook"] = workbook;
 }
예제 #25
0
 private ImmutableMap(FSharpMap <TKey, TValue> innerMap)
 {
     this.innerMap = innerMap;
 }
예제 #26
0
 /// <summary>
 /// Convert an F# Map into a LanguageExt Map (Map K V)
 /// </summary>
 public static Map <K, V> fs <K, V>(FSharpMap <K, V> fsMap) =>
 Map.addRange(Map <K, V>(), List.map(fsMap, identity));
예제 #27
0
 public WorldModel(FSharpMap<string, SpatialEntity> entities)
 {
     Entities = entities;
 }
예제 #28
0
 protected override IEnumerator <KeyValuePair <TKey, TValue> > GetSourceEnumerator(FSharpMap <TKey, TValue> source)
 {
     return(((IEnumerable <KeyValuePair <TKey, TValue> >)source).GetEnumerator());
 }
예제 #29
0
        public void Performance()
        {
            //Var.pushThreadBindings(RT.map(RT.CURRENT_NS, RT.CURRENT_NS.deref()));
            var m1 = new RecordedMapModel <string, Item>();
            //var m2 = new ClojureRecordedMapModel<string, Item>();
            var m3 = new Dictionary <string, Item>();
            var m4 = new FSharpMap <string, Item>(Enumerable.Empty <Tuple <string, Item> >());
            //var m5 = new PersistentTreeMap();

            const int size = 10000;
            var       s    = new Stopwatch();

            s.Start();
            for (var i = 0; i < size; i++)
            {
                m1.Set(i.ToString(), new Item(i, i.ToString()));
            }
            for (var i = 0; i < size * 100; i++)
            {
                m1.Get((i % size).ToString());
            }
            for (var i = 0; i < size; i++)
            {
                m1.Remove(i.ToString());
            }
            s.Stop();
            Console.WriteLine("RecordedMapModel took " + s.Elapsed);

            /*
             * s.Restart();
             * for (var i = 0; i < size; i++)
             *  m2.Set(i.ToString(), new Item(i, i.ToString()));
             * for (var i = 0; i < size * 100; i++)
             *  m2.Get((i % size).ToString());
             * for (var i = 0; i < size; i++)
             *  m2.Remove(i.ToString());
             * s.Stop();
             * Console.WriteLine("ClojureRecordedMapModel took " + s.Elapsed);
             */

            s.Restart();
            for (var i = 0; i < size; i++)
            {
                m3[i.ToString()] = new Item(i, i.ToString());
            }
            Item o;

            for (var i = 0; i < size * 100; i++)
            {
                m3.TryGetValue((i % size).ToString(), out o);
            }
            for (var i = 0; i < size; i++)
            {
                m3.Remove(i.ToString());
            }
            s.Stop();
            Console.WriteLine("Dictionary took " + s.Elapsed);

            m3.Clear();
            s.Restart();
            for (var i = 0; i < size; i++)
            {
                var tmp = new Dictionary <string, Item>(m3);
                tmp[i.ToString()] = new Item(i, i.ToString());
                m3 = tmp;
            }
            for (var i = 0; i < size * 100; i++)
            {
                m3.TryGetValue((i % size).ToString(), out o);
            }
            for (var i = 0; i < size; i++)
            {
                var tmp = new Dictionary <string, Item>(m3);
                tmp.Remove(i.ToString());
                m3 = tmp;
            }
            s.Stop();
            Console.WriteLine("Copy Dictionary took " + s.Elapsed);

            s.Restart();
            for (var i = 0; i < size; i++)
            {
                m4 = m4.Add(i.ToString(), new Item(i, i.ToString()));
            }
            for (var i = 0; i < size * 100; i++)
            {
                m4.TryFind((i % size).ToString());
            }
            for (var i = 0; i < size; i++)
            {
                m4 = m4.Remove(i.ToString());
            }
            s.Stop();
            Console.WriteLine("FSharpMap took " + s.Elapsed);

            /*
             * s.Restart();
             * for (var i = 0; i < size; i++)
             *  m5 = (PersistentTreeMap)m5.assoc(i.ToString(), new Item(i, i.ToString()));
             * object obj;
             * for (var i = 0; i < size * 100; i++)
             *  m5.TryGetValue((i % size).ToString(), out obj);
             * for (var i = 0; i < size; i++)
             *  m5 = (PersistentTreeMap)RT.dissoc(m5, i.ToString());
             * s.Stop();
             * Console.WriteLine("PersistentTreeMap took " + s.Elapsed);
             */
        }
예제 #30
0
파일: MainForm.cs 프로젝트: EMJK/pp-pretwa
        private void VisualState1OnMoveRequested(object sender, Tuple<FieldCoords, FieldCoords> tuple)
        {
            var moveResult = Board.applyMove(tuple.Item1, tuple.Item2, _State);
            _State = moveResult.Item1;
            var validMoves = Board.allValidMoves(moveResult.Item2, moveResult.Item1);
            _CurrentPlayer = GetNextPlayer(moveResult.Item2);
            visualState1.CurrentPlayer = _CurrentPlayer;
            visualState1.Draw(_State, validMoves);

            if (CheckAndDisplayWinner())
            {
                visualState1.Enabled = false;
                return;
            }

            if (_CurrentPlayer.IsRed && _EnableAI)
            {
                this.Enabled = false;
                MakeAIMove(moveResult.Item2);
            }
        }
예제 #31
0
        public async Task <ActionResult> Action()
        {
            var  action = Request["Action"];
            var  args   = new Dictionary <string, string>();
            byte opcode = 0x01;

            var address = Request["Address"];

            var contractHash = new Address(address).Bytes;

            string key  = HttpServerUtility.UrlTokenEncode(contractHash);
            var    file = $"{key}";

            string contractCode = null;
            var    codeFile     = Path.ChangeExtension(Path.Combine("db", "contracts", file), ".txt");

            if (System.IO.File.Exists(codeFile))
            {
                contractCode = System.IO.File.ReadAllText(codeFile);
            }

            var contractInteraction = new ContractInteraction()
            {
                Action  = action,
                Address = new Address(contractHash, AddressType.Contract).ToString()
            };

            ContractMetadata contractMetadata = null;

            try
            {
                var _metadata = ContractExamples.Execution.metadata(contractCode);

                if (FSharpOption <ContractMetadata> .get_IsNone(_metadata))
                {
                    contractInteraction.Message = "No metadata";
                }
                else
                {
                    contractMetadata = _metadata.Value;
                }
            }
            catch
            {
                contractInteraction.Message = "Error getting metadata";
                return(View(contractInteraction));
            }

            if (contractMetadata.IsCallOption)
            {
                var callOptionParameters =
                    (ContractExamples.Execution.ContractMetadata.CallOption)contractMetadata;
                switch (action)
                {
                case "Collateralize":
                    //var pkAddress = new PKAddressField();
                    //pkAddress.SetValue(Request["return-address"]);

                    //if (pkAddress.Invalid)
                    //{
                    //             contractInteraction.Message = "Invalid return address";
                    //	return View(contractInteraction);
                    //}

                    //args.Add("returnPubKeyAddress", pkAddress.Value);
                    opcode = OPCODE_COLLATERALIZE;
                    break;

                case "Exercise":
                    var pkExerciseReturnAddress = new PKAddressField();
                    pkExerciseReturnAddress.SetValue(Request["exercise-return-address"]);

                    if (pkExerciseReturnAddress.Invalid)
                    {
                        contractInteraction.Message = "Invalid send address";
                        return(View(contractInteraction));
                    }

                    args.Add("returnPubKeyAddress", pkExerciseReturnAddress.Value);

                    string oracleData;     //GetOracleCommitmentData(callOptionParameters.Item.underlying, DateTime.Now.ToUniversalTime()).Result;

                    if (GetLastData(callOptionParameters.Item.underlying, out oracleData))
                    {
                        args.Add("oracleRawData", oracleData);
                    }
                    else
                    {
                        contractInteraction.Message = "Error getting oracle data";
                        return(View(contractInteraction));
                    }

                    opcode = OPCODE_EXERCISE;
                    break;

                case "Buy":
                    var pkSendAddress = new PKAddressField();
                    pkSendAddress.SetValue(Request["buy-send-address"]);

                    if (pkSendAddress.Invalid)
                    {
                        contractInteraction.Message = "Invalid send address";
                        return(View(contractInteraction));
                    }

                    args.Add("returnPubKeyAddress", pkSendAddress.Value);
                    opcode = OPCODE_BUY;
                    break;
                    //case "Close":
                    //	opcode = OPCODE_CLOSE;
                    //	break;
                }
            }

            var argsMap = new FSharpMap <string, string>(args.Select(t => new Tuple <string, string>(t.Key, t.Value)));
            var result  = await Client.Send <GetContractPointedOutputsResultPayload>(_address, new GetContractPointedOutputsPayload()
            {
                ContractHash = contractHash
            });

            var utxos = GetContractPointedOutputsResultPayload.Unpack(result.PointedOutputs);
            var data  = ContractUtilities.DataGenerator.makeJson(contractMetadata, utxos, opcode, argsMap);

            if (data.IsError)
            {
                contractInteraction.Message = data.ErrorValue.ToString();
            }
            else
            {
                contractInteraction.Data = data.ResultValue.JsonValue.ToString();
            }

            return(View(contractInteraction));
        }
예제 #32
0
 public static FSharpMap <U, V> MapKey <K, V, U>(this FSharpMap <K, V> d, Func <K, U> f) => MapModule.OfSeq(d.Select(kv => Tuple.Create(f(kv.Key), kv.Value)));
예제 #33
0
 public static FSharpMap <K, V> WhereKV <K, V>(this FSharpMap <K, V> d, Func <KeyValuePair <K, V>, bool> keep) => d.Where(kv => !keep(kv)).Aggregate(d, (s, n) => s.Remove(n.Key));
예제 #34
0
 public void Set(TKeyType key, TValueType value)
 {
     _indHistory.OnSet();
     Map = Map.Add(key, value);
 }
예제 #35
0
 public void Clear()
 {
     _indHistory.OnSet();
     Map = new FSharpMap <TKeyType, TValueType>(Enumerable.Empty <Tuple <TKeyType, TValueType> >());
 }
예제 #36
0
        public void Draw(FSharpMap<FieldCoords, FieldState> state, FSharpList<Tuple<FieldCoords, FSharpOption<FieldCoords>, FieldCoords>> validMoves)
        {
            State = state;
            _ValidMoves = validMoves;

            Bitmap bmp = new Bitmap(_CanvasSize, _CanvasSize);
            Graphics canvas = Graphics.FromImage(bmp);

            DrawGrid(canvas);
            DrawFields(canvas);
            //DrawPossibleMoves(canvas);
            //DrawCoords(canvas);

            canvas.Flush();
            canvas.Dispose();

            _MainPictureBox.Image = bmp;
        }
예제 #37
0
 public void Remove(TKeyType key)
 {
     _indHistory.OnSet();
     Map = Map.Remove(key);
 }
        public static async Task <Http.HttpContext> ToSuaveHttpContext(
            this HttpContext context,
            bool preserveHttpHeaderCasing)
        {
            var request = context.Request;

            // Get HTTP headers
            var headers =
                ListModule.OfSeq(
                    request.Headers
                    .Select(h => new Tuple <string, string>(
                                preserveHttpHeaderCasing ? h.Key : h.Key.ToLower(),
                                h.Value))
                    .ToList());

            // Get the absolute URL
            var host        = request.Host.Value;
            var absoluteUrl = $"{request.Scheme}://{host}{request.Path}{request.QueryString.Value}";

            // Get the raw query string (Suave doesn't include the ? in the beginning)
            var rawQuery = request.QueryString.Value.Substring(Math.Min(request.QueryString.Value.Length, 1));

            // Get files and multipart fields from a form request
            var files           = new List <Http.HttpUpload>();
            var multipartFields = new List <Tuple <string, string> >();

            if (request.HasFormContentType && request.Form != null && request.Form.Count > 0)
            {
                multipartFields.AddRange(
                    request.Form.Select(field => new Tuple <string, string>(field.Key, field.Value)));

                if (request.Form.Files != null && request.Form.Files.Count > 0)
                {
                    foreach (var file in request.Form.Files)
                    {
                        var tempFileName = Path.GetTempFileName();

                        using (var fileStream = File.Open(tempFileName, FileMode.OpenOrCreate))
                            await file.OpenReadStream().CopyToAsync(fileStream);

                        files.Add(
                            new Http.HttpUpload(
                                file.Name,
                                file.FileName,
                                file.ContentType,
                                tempFileName));
                    }
                }
            }

            // Get the raw body
            // (This will be an empty byte array if the stream has already been
            // read during the form upload)
            var rawForm = await request.Body.ReadAllBytesAsync();

            var suaveRequest = new Http.HttpRequest(
                request.Protocol,
                new Uri(absoluteUrl),
                request.Host.Host,
                HttpMethodFromString(request.Method),
                headers,
                rawForm,
                rawQuery,
                ListModule.OfSeq(files),
                ListModule.OfSeq(multipartFields),
                TraceHeader.parseTraceHeaders(headers));

            var suaveRuntime          = Http.HttpRuntimeModule.empty;
            var suaveSocketConnection = ConnectionModule.empty;

            FSharpMap <string, object> userState =
                MapModule.Empty <string, object>().Add("WebSockets", context.WebSockets);


            Http.HttpCode hTTP_       = Http.HttpCode.HTTP_404;
            var           suaveResult = new Http.HttpResult(new Http.HttpStatus(hTTP_.code, hTTP_.reason), FSharpList <Tuple <string, string> > .Empty, Http.HttpContent.NullContent, false);

            return(new Http.HttpContext(suaveRequest, suaveRuntime, suaveSocketConnection, userState, new Http.HttpResult(new Http.HttpStatus(hTTP_.code, hTTP_.reason), FSharpList <Tuple <string, string> > .Empty, Http.HttpContent.NullContent, false)));
        }
예제 #39
0
 /// <summary>
 /// Convert an F# Map into a LanguageExt Map
 /// </summary>
 public static IImmutableDictionary <K, V> fs <K, V>(FSharpMap <K, V> fsMap) =>
 Map.addRange(map <K, V>(), List.map(fsMap, identity));
        public MetaData[] Convert(FSharpMap<string, ProductTypes.Meta> meta)
        {
            if (meta == null || meta.Count == 0) return null;

            return _h.Map(meta, pair => Convert(pair.Value));
        }
        public FSharpMap<string, ProductTypes.Meta> Merge(FSharpMap<string, ProductTypes.Meta> src, MetaData[] update)
        {
            if (src == null) return Convert(update);
            if (update == null) return src;

            foreach (MetaData m in update)
            {
                if(m == null) continue;
                if (src.ContainsKey(m.name))
                {
                    var converted = Merge(src[m.name], m);
                    src = src.Add(converted.key, converted);
                }
                else src = src.Add(m.name, Convert(m));
            }

            return src;
        }
예제 #42
0
        public void Performance()
        {
            //Var.pushThreadBindings(RT.map(RT.CURRENT_NS, RT.CURRENT_NS.deref()));
            var m1 = new RecordedMapModel<string, Item>();
            //var m2 = new ClojureRecordedMapModel<string, Item>();
            var m3 = new Dictionary<string, Item>();
            var m4 = new FSharpMap<string, Item>(Enumerable.Empty<Tuple<string, Item>>());
            //var m5 = new PersistentTreeMap();

            const int size = 10000;
            var s = new Stopwatch();
            s.Start();
            for (var i = 0; i < size; i++)
                m1.Set(i.ToString(), new Item(i, i.ToString()));
            for (var i = 0; i < size * 100; i++)
                m1.Get((i % size).ToString());
            for (var i = 0; i < size; i++)
                m1.Remove(i.ToString());
            s.Stop();
            Console.WriteLine("RecordedMapModel took " + s.Elapsed);

            /*
            s.Restart();
            for (var i = 0; i < size; i++)
                m2.Set(i.ToString(), new Item(i, i.ToString()));
            for (var i = 0; i < size * 100; i++)
                m2.Get((i % size).ToString());
            for (var i = 0; i < size; i++)
                m2.Remove(i.ToString());
            s.Stop();
            Console.WriteLine("ClojureRecordedMapModel took " + s.Elapsed);
             */

            s.Restart();
            for (var i = 0; i < size; i++)
                m3[i.ToString()] = new Item(i, i.ToString());
            Item o;
            for (var i = 0; i < size * 100; i++)
                m3.TryGetValue((i % size).ToString(), out o);
            for (var i = 0; i < size; i++)
                m3.Remove(i.ToString());
            s.Stop();
            Console.WriteLine("Dictionary took " + s.Elapsed);

            m3.Clear();
            s.Restart();
            for (var i = 0; i < size; i++)
            {
                var tmp = new Dictionary<string, Item>(m3);
                tmp[i.ToString()] = new Item(i, i.ToString());
                m3 = tmp;
            }
            for (var i = 0; i < size * 100; i++)
                m3.TryGetValue((i % size).ToString(), out o);
            for (var i = 0; i < size; i++)
            {
                var tmp = new Dictionary<string, Item>(m3);
                tmp.Remove(i.ToString());
                m3 = tmp;
            }
            s.Stop();
            Console.WriteLine("Copy Dictionary took " + s.Elapsed);

            s.Restart();
            for (var i = 0; i < size; i++)
                m4 = m4.Add(i.ToString(), new Item(i, i.ToString()));
            for (var i = 0; i < size * 100; i++)
                m4.TryFind((i % size).ToString());
            for (var i = 0; i < size; i++)
                m4 = m4.Remove(i.ToString());
            s.Stop();
            Console.WriteLine("FSharpMap took " + s.Elapsed);

            /*
            s.Restart();
            for (var i = 0; i < size; i++)
                m5 = (PersistentTreeMap)m5.assoc(i.ToString(), new Item(i, i.ToString()));
            object obj;
            for (var i = 0; i < size * 100; i++)
                m5.TryGetValue((i % size).ToString(), out obj);
            for (var i = 0; i < size; i++)
                m5 = (PersistentTreeMap)RT.dissoc(m5, i.ToString());
            s.Stop();
            Console.WriteLine("PersistentTreeMap took " + s.Elapsed);
             */
        }