blob: 8be5f652aec289a53c6929748297b84b99664108 [file] [log] [blame]
DOH (Dave's Object Hack)
DOH is a small C library that provides a number of simple yet powerful
data structures. The data structures are built around a dynamic typing
model in which any given object is allowed to support one or more
classes of operations. Furthermore, a simple garbage collection
scheme and a variety of interesting library methods are available.
All and all, the operation of DOH makes massive abuse of the C type
system and would probably make the language purists scream and
performance addicts run away in horror. However, I really don't
care--so there! However, for the rest of us, DOH is actually kind of
fun to use. This is only a short description of the methods and is no
way meant to be exhaustive.
Common Operations (for all types)
Delete(obj) Decrease the reference count and destroy if zero
Copy(obj) Make a copy of an object.
Clear(obj) Clear an object.
Setscope(obj) Set scope of an object (guru's only)
Str(obj) Create a string representation of obj.
Data(obj) Return pointer to raw data in an object
Char(obj) Convert to a char *
Len(obj) Length of an object
Hash(obj) Hash value (used for mapping)
Cmp(obj1,obj2) Compare two objects.
Name(obj) Return the object name
First(obj) Return first object (iterator)
Next(obj) Return next object
Dump(obj,out) Serialize on out
Load(in) Unserialize from in
First(obj) Iterator
Next(iter) Next iterator
Mapping Operations (for hash table behavior)
Getattr(hash,key) Get an attribute
Setattr(hash,key,value) Set an attribute
Delattr(hash,key) Delete an attribute
First(hash) Get first object (iterator)
Next(hash) Get next object
GetInt(hash,key) Get attribute as an 'int'
SetInt(hash,key,ivalue) Set attribute as an 'int'
GetDouble(hash,key) Get attribute as a 'double'
SetDouble(hash,key,dvalue) Set Attribute as a 'double'
GetChar(hash,key) Get attribute as a 'char *'
Sequence Operations
Getitem(list,index) Get an item
Setitem(list,index,val) Set an item
Delitem(list,index) Delete an item
Insert(list,index,val) Insert an item
Append(list,val) Append to end
Push(list,val) Insert at beginning
File Operations
Read(obj,buffer,len) Read data
Write(obj,buffer,len) Write data
Getc(obj) Get a character
Putc(ch,obj) Put a character
Ungetc(ch,obj) Put character back on input stream
Seek(obj,offset,whence) Seek
Tell(obj) Return file pointer
Delete(obj) Decrease the reference count, close file if zero
String Operations
Replace(obj, orig, rep, flags) Replace occurrences of orig with rep.
Chop(obj) Remove trailing whitespace
flags is one of the following:
Callable Operations
Call(obj, args) Perform a function call with arguments args.
Miscellaneous library functions
NewScope() Create a new scope
DelScope(s) Delete scope s
Readline(in) Read a line of input from in
Printf(out,fmt,...) Formatted output
DohEncoding(name, fn) Register a format encoding for Printf
Currently Available datatypes
NewString(char *initial) Strings
NewHash() Hash
NewList() List
NewVoid(void *ptr, void (*del)(void *)) Void
NewFile(char *filename, char *mode, List *newfiles) File
NewCallable(DOH *(*func)(DOH *, DOH *)) Callable object
Odds and ends:
1. All objects are of type 'DOH *'
2. When in doubt, see rule (1)
3. In certain cases, DOH performs implicit conversions
of 'char *' to an appropriate DOH string representation.
For operations involving files, DOH works with many
kinds of objects including FILE *, DOH File objects,
and DOH strings. Don't even ask how this works.
4. More complete documentation is forthcoming.