diff options
author | Ian Hinder <ian.hinder@aei.mpg.de> | 2013-09-13 11:42:52 +0200 |
---|---|---|
committer | Ian Hinder <ian.hinder@aei.mpg.de> | 2013-09-13 11:42:52 +0200 |
commit | 9347b58f09437c0c9e0ff86249f693c85a1212dd (patch) | |
tree | b7b23650cb14a08ae4b003638c5f9dd337beda59 /Tools/CodeGen/Object.m | |
parent | 03496443003f6d1f9645b6dfe1d0baccb0fbd6b9 (diff) |
Add new Object package
Currently performs no error checking, but this can be added later. The plan is to also add a schema for each class.
Diffstat (limited to 'Tools/CodeGen/Object.m')
-rw-r--r-- | Tools/CodeGen/Object.m | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/Tools/CodeGen/Object.m b/Tools/CodeGen/Object.m new file mode 100644 index 0000000..957af54 --- /dev/null +++ b/Tools/CodeGen/Object.m @@ -0,0 +1,67 @@ + +(* Copyright 2013 Ian Hinder + + This file is part of Kranc. + + Kranc is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + Kranc is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Kranc; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*) + +BeginPackage["Object`", {"Errors`", "Helpers`", "Kranc`"}]; + +NewObject; +SetObjectField; +GetObjectField; +AppendObjectField; +JoinObjectField; + +Begin["`Private`"]; + +(* Low-level functions *) + +DefFn[ + NewObject[class_Symbol, initList_List] := + Apply[class, initList]]; + +DefFn[ + keys[obj_] := + Sort[Map[First, obj]]]; + +DefFn[ + hasValueQ[obj_, field_] := + MemberQ[keys[obj], field]]; + +DefFn[ + SetObjectField[obj_, field_String, value_] := + If[Length[Cases[obj, HoldPattern[field -> _]]] > 0, + Replace[obj, (field -> _) :> field -> value, {1}], + Append[obj, field -> value]]]; + +DefFn[ + GetObjectField[obj_, field_String] := + Cases[obj, (field -> value_) :> value][[1]]]; + +(* High level functions *) + +DefFn[ + AppendObjectField[obj_, field_String, value_] := + SetObjectField[obj, field, Append[GetObjectField[obj, field], value]]]; + +DefFn[ + JoinObjectField[obj_, field_String, values_List] := + SetObjectField[obj, field, Join[GetObjectField[obj, field], values]]]; + +End[]; + +EndPackage[]; |